gpt4 book ai didi

android - 使用 LocationSettingsRequest 请求高精度位置不更新位置设置

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:51 25 4
gpt4 key购买 nike

我正在使用新的 LocationSettingsRequest 系统来请求高精度位置。例如,如果我的设备设置为省电模式,将提示系统对话框更新位置精度。这在大多数情况下都有效,但在某些设备中会发生以下情况:

  1. 如果设备设置为省电模式,系统对话框会询问 gps 权限,只有在确认后才会更改为 gps。
  2. 如果设备设置为仅 gps,系统会请求 wifi 和 google 服务以改进位置并在确认后更改为省电模式位置。

下面是我如何设置 LocationSettingsRequest:

val builder = LocationSettingsRequest.Builder()
.addLocationRequest(createLocationRequest(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY))
.addLocationRequest(createLocationRequest(LocationRequest.PRIORITY_HIGH_ACCURACY))
.setAlwaysShow(true)

settingsClient.checkLocationSettings(builder.build())

这会触发 Google Play 服务系统对话框以更新位置精度设置。但例如在运行 Android 7.0 的三星 Galaxy S6 上,该位置永远不会更新到高精度。

当我尝试可用的 Google 位置示例时会发生同样的情况 here .在 locationupdates 文件夹中,检查调用设置解析的 startLocationUpdates() 方法:

private void startLocationUpdates() {
// Begin by checking if the device has the necessary location settings.
mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
.addOnSuccessListener(this, new OnSuccessListener<LocationSettingsResponse>() {
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
Log.i(TAG, "All location settings are satisfied.");

//noinspection MissingPermission
mFusedLocationClient.requestLocationUpdates(mLocationRequest,
mLocationCallback, Looper.myLooper());

updateUI();
}
})
.addOnFailureListener(this, new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
int statusCode = ((ApiException) e).getStatusCode();
switch (statusCode) {
case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
Log.i(TAG, "Location settings are not satisfied. Attempting to upgrade " +
"location settings ");
try {
// Show the dialog by calling startResolutionForResult(), and check the
// result in onActivityResult().
ResolvableApiException rae = (ResolvableApiException) e;
rae.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
} catch (IntentSender.SendIntentException sie) {
Log.i(TAG, "PendingIntent unable to execute request.");
}
break;
case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
String errorMessage = "Location settings are inadequate, and cannot be " +
"fixed here. Fix in Settings.";
Log.e(TAG, errorMessage);
Toast.makeText(MainActivity.this, errorMessage, Toast.LENGTH_LONG).show();
mRequestingLocationUpdates = false;
}

updateUI();
}
});
}

在此三星设备上运行此示例应用程序会导致同样的问题。 onActivityResult()Activity.RESULT_CANCELED 情况下被调用。

有人遇到过类似的事情吗?关于如何解决该问题的任何想法?

最佳答案

在 android 8.0 和 8.1 设备上有同样的问题。我通过将定位模式更改为省电解决了这个问题。

mLocationRequest.setPriority(LocationRequest.PRIORITY_BALANCED_POWER_ACCURACY);

替换了 HIGH_ACCURACY 请求。

关于android - 使用 LocationSettingsRequest 请求高精度位置不更新位置设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55520315/

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