2016-11-13 174 views
0

我想獲得當前設備位置和開放Google Maps本:Android的位置監聽器不工作

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) { 
    } 
} 

但這種代碼是不工作:出於某些原因聽衆被忽略。

爲什麼以及如何解決它?

+0

爲什麼你實例位置監聽器爲'LocationListener的LocationListener的=新MyLocationListener();'而不是'MyLocationListener LocationListener的=新MyLocationListener();' – Jordan

回答

2

「爲什麼......」

因爲requestLocationUpdates()是asynchorous操作和結果(位置)在onLocationChanged()回調返回。該位置不可立即使用。

「...以及如何解決它?」

移動你的谷歌地圖有意向代碼:

@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

我的理解是,您還需要取消註冊您的位置偵聽器以避免泄露活動 - 請參閱['removeUpdates'](https://developer.android.com/reference/android/location/LocationManager.html#removeUpdates (android.location.LocationListener))方法。 – clownba0t

+0

@Markus我改變了,問題仍然在這裏,我試圖調試這個,似乎onLocationChanged()不叫.. – VLeonovs

+1

這可能需要一段時間的位置獲得。您設置的刷新週期時間間隔爲5000毫秒,是刷新之間的_minimum_時間段。由於幾個原因可能會更長。您還指定了最小距離爲10米,因此導致位置移動距離不超過10米的位置更改將不會返回給您。考慮將其設置爲0,至少在最初時。 – clownba0t