经过大量的阅读和我自己的斗争,我不得不问我更好的同龄人。
我有一种无法解释的行为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()
没有被调用,然后我得到一个假的可用性!在某些情况下,我不止一次接到了它的电话。在使用 Android 6-8 的多个设备中观察到上述行为。搭载 Android 9 的 Pixel 3 会按预期提供位置信息。
如果我在有问题的设备上启动谷歌地图,在这种情况下地图也无法显示位置。如果我然后关闭位置,我会得到带有“?”的地图位置按钮。在里面。按下地图中的按钮,我会弹出一个窗口,我应该打开位置。好的,这也恢复了我的应用程序中的定位服务!!!
如果我使用失败案例
LocationSettingsRequest
并进行自动解析(与谷歌地图相同的弹出窗口),那么位置会正确触发!!!
所以问题基本上是......为什么?
从按下快速访问按钮打开定位服务时,自动解析弹出窗口有什么不同。检查设置时,快速访问按钮也会返回成功。还有另一种万无一失的请求方式requestLocationUpdates()
吗?
提前致谢。