gpt4 book ai didi

Android LocationServices.checkLocationSettings 假阴性结果

转载 作者:行者123 更新时间:2023-12-05 05:54:21 31 4
gpt4 key购买 nike

到目前为止受影响的设备:

  • Xperia 1 II
  • 小米红米 Note 7

使用:为了请求位置更新,我检查了位置设置事先是足够的。如果没有,我会显示一个小文本,表示服务必须为我的功能启用。如果用户点击它,系统对话框启用将提示定位服务。

我如何进行检查:我通过 LocationSettingsRequestLocationServices 运行检查,并且处理 ResolvableApiException。如果服务被用户禁用,然后在我所有的设备上,这将显示系统对话框,要求用户启用服务(并启用它,如果单击确定)。

在 Redmi 上发生了什么:但无论出于何种原因,在 Xiamoi Redmi Note 7 上,checkLocationSettings总是返回一个ResolvableApiException,即使服务已经启用。对话框不会出现,直接返回肯定结果(当然,因为该服务已启用)。因此,用户会卡住并永远点击“启用”。

有人知道为什么 LocationSettingsRequest 不工作吗正确地安装在这些设备上并知道如何修复它?

示例代码 fragment

void enableLocationSettings(onLocationServiceRequiredCallback: ICallback) {
LocationRequest locationRequest = LocationRequest.create()
.setInterval(LOCATION_UPDATE_INTERVAL)
.setExpirationDuration(LOCATION_UPDATE_EXPIRATION_DURATION)
.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
.addLocationRequest(locationRequest);

LocationServices
.getSettingsClient(this)
.checkLocationSettings(builder.build())
.addOnSuccessListener(this, (LocationSettingsResponse response) -> {
// update location as usual
})
.addOnFailureListener(this, error -> {
if (error instanceOf ApiException) {
int statusCode = error.statusCode;
if(statusCode == LocationSettingsStatusCodes.RESOLUTION_REQUIRED) {
if(error instanceOf ResolvableApiException) {
PendingIntent resolution = error.resolution
// This will trigger the system dialog, see below
onLocationServiceRequiredCallback(resolution);
}
}
}
// error callback
});


不幸的是,回调代码现在将是 kotlin。对不起。我只能发布“示例代码 fragment ”,因为这是与工作相关的。

它使用 ActivityResultContracts.StartIntentSenderForResult 开始系统对话框。

resolution 是上面的 PendingIntent。

契约(Contract):

private val locationServiceContract = registerForActivityResult(
ActivityResultContracts.StartIntentSenderForResult()
) { activityResult ->
lifecycleScope.launchWhenResumed {
val result = if (activityResult.resultCode == Activity.RESULT_OK) {
// This will retrigger the location fetch (looping)
enableLocationSettings(...)
} else {
// Do nothing
}
}
}

调用上面的回调后,将执行:

        locationServiceContract.launch(
IntentSenderRequest.Builder(
resolution
).build()
)

LocationSettingsStates 的转储,使用已弃用的 LocationSettings API(使用 GoogleApiClient)获取:

isGpsPresent: true, 
isGpsUsable: false,
isLocationPresent: true,
isLocationUsable: true,
isNetworkLocationPresent: true,
isNetworkLocationUsable: true

最佳答案

您好,我使用不同的代码来检查设备上是否启用了 GPS。也许值得您尝试一下,看看它是否能解决您的问题。

 private boolean isLocationEnabled(Context context) {
LocationManager locationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
return LocationManagerCompat.isLocationEnabled(locationManager);
}

然后我使用对话框将用户发送到设置

Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS);
context.startActivity(intent);

我打赌你也在做同样的事情。在发送用户启用 GPS 后,您可以在恢复时再次运行该方法

如果有帮助请告诉我

关于Android LocationServices.checkLocationSettings 假阴性结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69649666/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com