无法获取真实Android设备上的当前位置

时间:2015-07-21 08:59:41

标签: android android-location android-maps

我需要获取当前位置的Lat和Long来绘制路径,我的代码在模拟器上工作,但是当我在真实设备上调试时,它不会。这就是我获取当前位置的方式:

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

1 个答案:

答案 0 :(得分:0)

这可能发生,因为在某些设备上GPS需要一些时间来初始化。 如果您在GPS初始化之前请求当前位置,则肯定会获得空位置值,因为GPS尚未初始化。

有几种方法可以阻止这种情况。我建议您使用Play服务进行位置检测,或者您只需使用名为

的库

Android-ReactiveLocation

您可以请求Reactive Location获取最后一个已知位置,以阻止获取空值

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