RESOLUTION_REQUIRED 即使用户的位置已开启。可能吗?
Posted
技术标签:
【中文标题】RESOLUTION_REQUIRED 即使用户的位置已开启。可能吗?【英文标题】:RESOLUTION_REQUIRED even if user's location is on. Is it possible? 【发布时间】:2018-08-10 23:10:39 【问题描述】:我在一个应用上使用 Google 的 SettingsClient
。它工作正常,但有些用户无法使用 GPS,即使他们打开了位置并且他们已经授予了访问位置权限的权限。据我了解,如果Settings Client
在FailureListener
上返回RESOLUTION_REQUIRED,那是因为用户禁用了位置。
这是真的吗?还是有任何其他原因返回 RESOLUTION_REQUIRED?
返回RESOLUTION_REQUIRED时,GPS图标不会显示在状态栏上,但它应该在那里!
这是我的代码:
SettingsClient mSettingsClient =
LocationServices.getSettingsClient(context);
LocationRequest mLocationRequest = new LocationRequest();
mLocationRequest.setInterval(UPDATE_INTERVAL_MS);
mLocationRequest.setFastestInterval(FASTEST_INTERVAL_MS);
mLocationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
LocationSettingsRequest.Builder builder = new
LocationSettingsRequest.Builder();
builder.addLocationRequest(mLocationRequest);
mLocationSettingsRequest = builder.build();
mSettingsClient.checkLocationSettings(mLocationSettingsRequest)
.addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>()
@Override
public void onSuccess(LocationSettingsResponse locationSettingsResponse)
connected = true;
// Fused Location code...
)
.addOnFailureListener(new OnFailureListener()
@Override
public void onFailure(@NonNull Exception e)
connected = false;
gpsFailureMessage = e.getMessage();
);
【问题讨论】:
看起来位置检索的某些要求/权限未得到满足,根据他们的文档,您可以请求此特殊代码的权限。参考developers.google.com/android/reference/com/google/android/gms/…中的文档和代码 检查您的播放服务版本和您的权限,其中任何一个都可能导致这种情况发生 我 99% 确定已授予所有权限。我会要求他们将他们的 Google Play 服务版本发送给我。谢谢你们两个:) 面临同样的问题。问题解决了吗? 嘿@SaurabhPadwekar,我没能解决这个问题。我猜这可能与低 GPS 信号有关,有时它可以工作,有时它不......我 【参考方案1】:我遇到了这个问题,发现这个问题是由定位模式引起的,即使 GPS 开启,但如果定位模式仍然选择“仅 GPS”,则会发生此异常,当我更改为另一种模式时,它工作正常. 不幸的是,您无法以编程方式设置位置模式,但您可以将用户直接发送到设置屏幕,他可以在其中执行此操作,请关注此 anwser https://***.com/a/25745124/8921450
【讨论】:
可悲的是,这不是我的情况。即使用户的位置处于 高精度,我仍然面临 RESOLUTION_REQUIRED 错误【参考方案2】:以编程方式解决此问题的一种方法是检查可用位置的准确性,如this 官方android 文档中所述。我是这样做的,像这样在你的 locationUtils 类中创建一个伴随对象(静态函数)
class LocationUtils
//other methods
companion object
fun checkLocationRequest(context: FragmentActivity, successCase : () -> Unit)
val builder = LocationSettingsRequest.Builder()
.addLocationRequest(createLocationRequest())
val client: SettingsClient = LocationServices.getSettingsClient(context)
val task = client.checkLocationSettings(
builder.build()
)
task.addOnSuccessListener
successCase()
task.addOnFailureListener exception ->
if(exception is ResolvableApiException)
try
exception.startResolutionForResult(context, CHECK_LOCATION_SETTING)
catch (sendEx: IntentSender.SendIntentException)
然后你可以像这样调用函数
LocationUtils.checkLocationRequest(activity)
runHappyCase() //perform operation you intend to do with the location
如果位置不处于高精度状态,则会显示提示用户选择高精度的对话框。您可以通过onActivityResult()
查看用户的回复
【讨论】:
以上是关于RESOLUTION_REQUIRED 即使用户的位置已开启。可能吗?的主要内容,如果未能解决你的问题,请参考以下文章
Pixel 手机上的 checkLocationSettings 返回 RESOLUTION_REQUIRED
即使凭据正确,Spring-security 也不会登录用户