微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

除非执行 mSettingsClient.checkLocationSettings,否则无法获取 locationSettings 的 getStatusCode

如何解决除非执行 mSettingsClient.checkLocationSettings,否则无法获取 locationSettings 的 getStatusCode

有没有办法知道 LocationSettingsstatusCodes 是否等于 RESOLUTION_required 而不必一直调用 mSettingsClient.checkLocationSettings ?可能来自 onLocationChanged 侦听器的位置对象?

 mSettingsClient.checkLocationSettings(mLocationSettingsRequest).addOnSuccessListener(mActivity,new OnSuccessListener<LocationSettingsResponse>() {
                    @Override
                    public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                        Log.i(this.getClass().getName(),"Location settings ok");
                        mFusedProviderClient.requestLocationUpdates(mLocationRequest,mLocationCallback,Looper.myLooper()).addOnSuccessListener(new OnSuccessListener<Void>() {
                            @Override
                            public void onSuccess(Void aVoid) {
                                
                            }
                        });
                    }
                }).addOnFailureListener(mActivity,new OnFailureListener() {
                    @Override
                    public void onFailure(@NonNull Exception e) {
                        int statusCode = ((ApiException) e).getStatusCode();
                        if(statusCode == LocationSettingsstatusCodes.RESOLUTION_required){
                            //Location settings not satisfied.
                                try {
                                    // Cast to a resolvable exception.
                                    ResolvableApiException resolvable = (ResolvableApiException) e;
                                    resolvable.startResolutionForResult(
                                            mActivity,AppCommand.REQUEST_GOOGLE_ACCURACY);
                                } catch (IntentSender.SendIntentException ex) {
                                    Log.e(this.getClass().getName(),"SendIntentException " + e.getLocalizedMessage());
                                }
                            }
        
    
                        Log.e(this.getClass().getName(),"Check location permission Failed: " +e.getLocalizedMessage());
                    }
                }
            );

解决方法

如果 LocationSettingsStatusCodes 等于 RESOLUTION_REQUIRED

这不是真的。 LocationSettingsStatusCodes 等于 RESOLUTION_REQUIREDLocationSettingsStatusCodes是对失败异常处理机制的封装,但实际过程中可能会出现其他异常,我们无法保证还有哪些情况会导致权限检查失败。

,

当您尝试获取位置时,您不必一直检查位置设置。 mSettingsClient.checkLocationSettingsmFusedProviderClient.requestLocationUpdates 这两个调用可以分别调用。由于它们是异步回调,因此请确保先调用 checkLocationSettings,然后调用 requestLocationUpdate。

一个建议是在片段或活动的 onCreate()onResume() 中调用 checkLocationSettings。并在需要时调用 requestLocationUpdates()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。