无法在真实 android 设备上获取当前位置

Unable to get the current location on real android device

我需要获取当前位置的纬度和经度来绘制路线,我的代码在模拟器上可以运行,但在真实设备上调试时却不行。这就是我获取当前位置的方式:

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 为空,无法在当前位置放置标记。代码有问题吗?有人可以帮帮我吗!!

这是在真实设备上:

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

有几种方法可以防止这种情况发生。我建议您使用 Play Services 进行位置检测,或者您可以简单地使用一个名为 ,

的库

Android-ReactiveLocation

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

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