【问题标题】:Fused location provider behavior in Android 5.0 unexpectedAndroid 5.0 中的融合位置提供程序行为出乎意料
【发布时间】:2015-11-01 13:37:44
【问题描述】:
我正在尝试使用 android 融合位置提供程序,使用 PRIORITY_HIGH_ACCURACY 每 30 分钟获取一次设备位置。让我惊讶的是,
当 GPS 被禁用时,我希望 API 能够利用网络提供商和传感器为我提供准确度不高的位置。但是,在这种情况下,API 返回的位置 对于 Android 5.0 为空。
这种行为在 Android 4.0 中有所不同,它为我提供了准确度不高的位置,正如预期的那样。我找不到任何关于此的文档!有什么想法吗??
编辑: 刚刚意识到,Android 5.0 的设备没有 SIM 卡,这是否意味着如果没有 SIM 卡,融合位置提供商也不会考虑 WiFi 来寻找最佳位置?
【问题讨论】:
标签:
android
location
fusedlocationproviderapi
android-fusedlocation
【解决方案1】:
在设备位置关闭后缓存将被清除,因此您应该将 LocationRequest 与 PRIORITY_HIGH_ACCURACY 一起使用。您可以使用 LocationCallBack 作为弱引用,这样您就可以避免内存泄漏。您必须在 onStop() 中删除位置更新。这样的代码,
LocationRequest locationRequest = LocationRequest.create();
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
locationRequest.setInterval(2000);
LocationCallback locationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
super.onLocationResult(locationResult);
if (locationResult == null || locationResult.getLastLocation() == null)
return;
updateLocation(locationResult.getLastLocation());
}
};
fusedLocationProviderClient.requestLocationUpdates(locationRequest, locationCallback, null);