2016-07-28 3 views
0

Eingeschlossen im Manifest erhalten:Kann nicht meine Position in der App Karte

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 

Der Aktivitätscode:

public class ActivityLogin extends AppCompatActivity { 
    public static LocationManager mLocationManager; 
    public static MyLocationListener locationListener = new MyLocationListener(); 

    //... 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     // ... 
     ActivityCompat.requestPermissions(ActivityLogin.this, 
      new String[] { 
       Manifest.permission.ACCESS_FINE_LOCATION 
      }, 
      2); 
     // ... 

    @Override 
    public void onRequestPermissionsResult(int requestCode, 
     String permissions[], int[] grantResults) { 
     switch (requestCode) { 
      case 2: 
       { 
        // If request is cancelled, the result arrays are empty. 
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { 
         mLocationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 10 * 1000, 0, locationListener); 
         mLocationManager.requestLocationUpdates(LocationManager.NETWORK_PROVIDER, 10 * 1000, 0, locationListener); 
         mLocationManager.requestLocationUpdates(LocationManager.PASSIVE_PROVIDER, 10 * 1000, 0, locationListener); 
        } 
        return; 
       } 
      } 
     } 
    } 
} 

public class MyLocationListener implements LocationListener { 
    public void onLocationChanged(Location location) { 
     MapsActivity.Mylocation = new LatLng(
      location.getLatitude(), location.getLongitude()); 
    } 

    public void onProviderDisabled(String provider) { 
     // ... 
    } 

    public void onProviderEnabled(String provider) { 
     // ... 
     Location location = ActivityLogin.mLocationManager 
      .getLastKnownLocation(provider); 
     if (location != null) { 
      MapsActivity.Mylocation = new LatLng(
       location.getLatitude(), location.getLongitude()); 
     } 
    } 

    public void onStatusChanged(String provider, int status, Bundle extras) { 
     // ...  
    } 
} 

Als Ergebnis der Veranstaltung onLocationChanged nicht auftritt. Wenn ich wifi aus- und wieder einschalte, tritt das Ereignis onProviderEnabled auf und ActivityLogin.mLocationManager.getLastKnownLocation(provider) gibt null zurück.

Am Ende kann ich meine Koordinaten nicht bekommen.

Antwort

0

Ich hatte Probleme mit dem LocationListener in der Vergangenheit und der einzige Weg, wie ich es funktionierte, war die Implementierung des LocationListener in der mainActivity, ein lokaler oder stiller LocationListener würde einfach nicht funktionieren.

zB

public class ActivityLogin extends AppCompatActivity implements LocationListener 

Das heißt, wird Google die Locationironischen und es mit dem Google-Standort-API ersetzen. Dies verwendet die fusionedLocationAPI mit einem GoogleApiClient.

In Ihrem onCreate sollten Sie so etwas wie

GoogleApiClient api_client; 

api_client = new GoogleApiClient.Builder(this) 
       .addConnectionCallbacks(this) 
       .addOnConnectionFailedListener(this) 
       .addApi(LocationServices.API) 
       .build(); 

In Ihrem onConnected Methode haben Sie so etwas wie

location = LocationServices.FusedLocationApi.getLastLocation(api_client); 

ich es eine Verbesserung nicht denken sollte, ist aber Google zwingen diese auf uns .

Verwandte Themen