2016-11-13 5 views
0

Ich möchte aktuelle Gerätestandort und offene Google Maps mit diesem erhalten:Android Location Hörer funktioniert nicht

if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) { 
     LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); 
     LocationListener locationListener = new MyLocationListener(); 
     locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 10, locationListener); 


    } else { 
     ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, MY_LOCATION_REQUEST_CODE); 
    } 




private class MyLocationListener implements LocationListener { 

    @Override 
    public void onLocationChanged(Location loc) { 

     longitude = loc.getLongitude(); 
     latitude = loc.getLatitude(); 

     Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=" + latitude + "," + longitude + "&daddr=55.877526, 26.533898")); 
     startActivity(intent); 
    } 

    @Override 
    public void onProviderDisabled(String provider) { 
    } 

    @Override 
    public void onProviderEnabled(String provider) { 
    } 

    @Override 
    public void onStatusChanged(String provider, int status, Bundle extras) { 
    } 
} 

Aber dieser Code funktioniert nicht: aus irgendwelchen Gründen Zuhörer ignoriert.

Warum und wie es zu beheben?

+0

Warum Instanziieren Sie Standort Zuhörer als 'Locationlocation = new MyLocationListener();' und nicht als 'MyLocationListener Location = new MyLocationListener();' – Jordan

Antwort

2

"Warum ..."

Da requestLocationUpdates() ist ein asynchorous Betrieb und das Ergebnis (die Lage) in dem onLocationChanged() Rückruf zurückgegeben. Der Standort ist nicht sofort verfügbar.

"... und wie man es repariert?"

Bewegen Sie die Google Vorsatz Code Karte:

@Override 
public void onLocationChanged(Location loc) { 

    longitude = loc.getLongitude(); 
    latitude = loc.getLatitude(); 

    Intent intent = new Intent(android.content.Intent.ACTION_VIEW, Uri.parse("http://maps.google.com/maps?saddr=" + latitude + "," + longitude + "&daddr=55.877526, 26.533898")); 
    startActivity(intent); 

} 
+1

Mein Verständnis ist, dass Sie auch Ihre Standortlistener abmelden möchten, um die Aktivität nicht zu verlieren - siehe ['removeUpdates'] (https://developer.android.com/reference/android/location/LocationManager.html#removeUpdates (android.location.LocationListener)) Methode. – clownba0t

+0

@Markus Ich änderte und Problem immer noch hier, ich habe versucht, dies zu debuggen und es scheint, dass onLocationChanged() nicht aufgerufen wird .. – VLeonovs

+1

Es kann einige Zeit dauern, bis der Speicherort erhalten wird. Das von Ihnen festgelegte Aktualisierungsintervall, in Ihrem Fall 5.000 Millisekunden, ist der minimale Zeitraum zwischen den Aktualisierungen. Es kann aus mehreren Gründen länger sein. Sie geben außerdem einen Mindestabstand von 10 Metern an, sodass Standortänderungen, die dazu führen, dass sich der Standort weniger als 10 Meter von der vorherigen Position entfernt, nicht an Sie zurückgegeben werden. Überlegen Sie, ob Sie dies zumindest anfangs auf 0 setzen. – clownba0t