经过大量阅读并亲自与之抗争,我不得不问我的同龄人。
我的行为无法用FusedLocationClient
来解释。
我想获取位置(仅一个实例)以向用户显示一些信息。为此,我打电话给:
mFusedLocationClient.getLastLocation().addOnSuccessListener(...)
如果getLastLocation()
的位置为空。我想“开始启动”客户端以获取一个位置。
LocationRequest locationRequest = new LocationRequest();
locationRequest.setFastestInterval(5000);
locationRequest.setInterval(10000);
locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
mLocationCallback = new LocationCallback() {
@Override
public void onLocationResult(LocationResult locationResult) {
Timber.d("OnLocationResult entered");
if (locationResult != null && !locationResult.getLocations().isEmpty())
findCurrentArea();
}
@Override
public void onLocationAvailability(LocationAvailability locationAvailability) {
Timber.d("OnLocationAvailability entered");
super.onLocationAvailability(locationAvailability);
}
};
mFusedLocationClient.requestLocationUpdates(locationRequest, mLocationCallback, null);
让我事先说一下,我也使用过LocationSettingsRequest
来检查设置,并且我总是成功的。
奇怪的部分:
onLocationAvailability()
被调用了两次。第一次响应是正确的,但是没有调用onLocationResult()
,然后我得到的是false!我有几次不止一次地叫它。
在使用Android 6-8的多个设备中观察到以上行为。配备Android 9的Pixel 3可以提供预期的位置。
在这种情况下,如果我在有问题的设备上启动Google Maps,则地图也无法显示位置。如果然后关闭位置,则会显示带有“?”的地图位置按钮。在里面。按下地图上的按钮,我会弹出一个窗口,我应该打开位置。好的,这也可以恢复我应用程序中的位置服务!
如果我使用LocationSettingsRequest
失败案例并进行自动解析(与Google Maps相同的弹出窗口),则位置会正确触发!!!
所以问题基本上是...为什么?
通过按快速访问按钮打开定位服务时,自动解析弹出窗口有何不同之处。检查设置时,快速访问按钮也会返回成功。还有另一种可以保证请求requestLocationUpdates()
的方式吗?
谢谢。