我的位置服务在 API >=23 上工作得很好,但对于 API 21 和 22 没有显示任何内容。这是我的位置方法(请注意,我正在使用片段):
/*if (!Permissions) { //location permission for APIs >=23
Log.d("Location", "Unable to get user location");
return;
} */
Log.d("Location", "User location requesting ... ");
LocationServices.getFusedLocationProviderClient(fragment.requireActivity())
.requestLocationUpdates(requestLocation(), new LocationCallback() {
@Override
public void onLocationResult(@NonNull LocationResult locationResult) {
super.onLocationResult(locationResult);
Log.d("User location", Objects.requireNonNull(locationResult.getLastLocation()).toString());
}
}, null);
});
这是我在上面使用的
requestLocation()
方法:
private static LocationRequest requestLocation() {
return new LocationRequest.Builder(Priority.PRIORITY_HIGH_ACCURACY, 5000)
.setWaitForAccurateLocation(true)
.setMinUpdateIntervalMillis(2000)
.setMaxUpdateDelayMillis(100)
.setMaxUpdates(1)
.build();
}
但这不适用于 API 21 和 22。我尝试在模拟器设置中手动设置位置,但同样没有任何反应。关于如何在 java 中获取这些 API 的用户位置,有什么建议吗?
我也尝试过使用“最后位置”方法,但没有帮助。
这里有一些与SO相关的帖子。
经过多方查找,终于找到了问题所在。 FusedLocationProviderClient 方法仅适用于安装了 GooglePlayStore 的系统。它与 API 级别 22 或 21 无关。