【问题标题】:Unable to get getStatusCode of locationSettings unless mSettingsClient.checkLocationSettings is executed除非执行 mSettingsClient.checkLocationSettings,否则无法获取 locationSettings 的 getStatusCode
【发布时间】:2021-02-07 20:54:57
【问题描述】:

有什么方法可以知道 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());
                    }
                }
            );

【问题讨论】:

    标签: android gps location google-location-services


    【解决方案1】:

    如果 LocationSettingsStatusCodes 等于 RESOLUTION_REQUIRED

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2019-02-18
        • 1970-01-01
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        相关资源
        最近更新 更多