我需要获取当前位置的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
为空并且无法在当前位置放置标记。代码中有什么东西吗?有人可以帮帮我!!
这是在真实设备上:
答案 0 :(得分:0)
这可能发生,因为在某些设备上GPS需要一些时间来初始化。 如果您在GPS初始化之前请求当前位置,则肯定会获得空位置值,因为GPS尚未初始化。
有几种方法可以阻止这种情况。我建议您使用Play服务进行位置检测,或者您只需使用名为
的库您可以请求Reactive Location获取最后一个已知位置,以阻止获取空值
ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);
locationProvider.getLastKnownLocation()
.subscribe(new Action1<Location>() {
@Override
public void call(Location location) {
doSthImportantWithObtainedLocation(location);
}
});