无法在真实 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 进行位置检测,或者您可以简单地使用一个名为 ,
的库
您可以请求 Reactive Location 获取最后一个已知位置,这将防止获取空值,
ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);
locationProvider.getLastKnownLocation()
.subscribe(new Action1<Location>() {
@Override
public void call(Location location) {
doSthImportantWithObtainedLocation(location);
}
});
我需要获取当前位置的纬度和经度来绘制路线,我的代码在模拟器上可以运行,但在真实设备上调试时却不行。这就是我获取当前位置的方式:
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 进行位置检测,或者您可以简单地使用一个名为 ,
的库您可以请求 Reactive Location 获取最后一个已知位置,这将防止获取空值,
ReactiveLocationProvider locationProvider = new ReactiveLocationProvider(context);
locationProvider.getLastKnownLocation()
.subscribe(new Action1<Location>() {
@Override
public void call(Location location) {
doSthImportantWithObtainedLocation(location);
}
});