我的 Android 应用需要高精度位置跟踪。在应用启动时,如果未选择高精度,它会以编程方式读取位置设置并显示一个屏幕。
我将 Google 的官方示例 ( https://developers.google.com/android/reference/com/google/android/gms/location/SettingsClient ) 改编为 Kotlin。
这在华为手机上按预期工作,但在三星 S7 和 S8 上失败:如果用户选择了功率平衡,则会出现一个对话框,并且位置跟踪设置为高精度。但是,如果之前选择了 GPS only,则不会抛出 ApiException
并且设置保持不变。
val locationRequest = LocationRequest.create()
locationRequest.priority = LocationRequest.PRIORITY_HIGH_ACCURACY
val builder = LocationSettingsRequest.Builder().addLocationRequest(locationRequest)
val result = LocationServices.getSettingsClient(this).checkLocationSettings(builder.build())
result.addOnCompleteListener(OnCompleteListener {
try {
it.getResult(ApiException::class.java)
// on Samsung + GPS only setting, execution passes here, no ApiException thrown
} catch(e: ApiException) {
if(e is ResolvableApiException) {
// ...show resolution dialog...
}
}
}
任何提示将不胜感激,谢谢:)
最佳答案
我在 s8 上遇到了同样的问题,所以我检查了设备,如果是 s8,我用 PRIORITY_BALANCED_POWER_ACCURACY
发出请求,它可以工作,但有一些延迟。
关于Android 位置请求 PRIORITY_HIGH_ACCURACY 无效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49150328/