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 ClientFailureListener 上返回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 也不会登录用户

检查用户名是不是存在函数返回 TRUE 即使不存在

即使安装后iOS应用程序也会崩溃,但新用户不会

即使在 Lollipop 之前,如何获取当前设备的用户列表?

即使关闭应用程序,如何保持用户登录?我正在使用 swift 3 和 Firebase