2015-07-21 117 views
0

我需要獲取當前位置的緯度和長度來繪製路徑,我的代碼在仿真器上工作,但是當我在真實設備上調試時,它不會。這是我如何得到當前位置:無法獲取真實Android設備上的當前位置

private void gotoCurrentLocation(){ 
    mMap.setMyLocationEnabled(true); 
    LocationManager locationManager = (LocationManager) getSystemService(LOCATION_SERVICE); 
    locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER,0,0,listener); 
    Location myLocation = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); 

    if(myLocation==null) { MYPLACE = null; return;} 
    MYPLACE = new LatLng(myLocation.getLatitude(),myLocation.getLongitude()); 
    mMap.addMarker(new MarkerOptions().position(ll).title("You're here")); 
} 

LocationListener listener = new LocationListener() { 
    @Override 
    public void onLocationChanged(Location location) { 
     MYPLACE = new LatLng(location.getLatitude(),location.getLongitude()); 
    } 

這是GenyMotion虛擬設備上的地圖。當我在真實設備上進行調試時,地圖上的虛擬設備上也有像當前位置那樣的藍色小點,但MYPLACE爲空,因此無法在當前位置放置標記。有代碼的東西嗎?有人可以幫助我!

route

這纔是真正的設備上:

enter image description here

+0

你確定你的設備有GPS和它的GPS是 –

+0

是的,我敢肯定,我用谷歌地圖使用我的應用程序 –

+0

之前,你收到的地圖嗎?也許這是API密鑰的問題? – Fixus

回答

0

這可能發生,因爲在某些設備上的GPS需要一些時間進行初始化。 如果您在GPS初始化之前請求您的當前位置,您肯定會得到空位值,因爲GPS尚未初始化。

有幾種防止這種情況的方法。我建議你使用Play服務定位檢測,或者你可以簡單地使用一種稱爲庫,

Android-ReactiveLocation

您可以要求無位置,以獲得最後的已知位置,這將阻止得到一個空值,

ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context); 
locationProvider.getLastKnownLocation() 
    .subscribe(new Action1<Location>() { 
     @Override 
     public void call(Location location) { 
      doSthImportantWithObtainedLocation(location); 
     } 
    });