【问题标题】:Receive error before click Ok on Location Dialog Bog在位置对话框中单击确定之前收到错误消息
【发布时间】:2021-11-23 12:17:05
【问题描述】:

我的代码:

LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder();
            builder.addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY));
            builder.setAlwaysShow(true);
            mLocationSettingsRequest = builder.build();

            mSettingsClient = LocationServices.getSettingsClient(MainActivity.this);

            mSettingsClient
                    .checkLocationSettings(mLocationSettingsRequest)
                    .addOnSuccessListener(new OnSuccessListener<LocationSettingsResponse>() {
                        @Override
                        public void onSuccess(LocationSettingsResponse locationSettingsResponse) {
                            //Success Perform Task Here
                            Log.d("MyApp", "OK!" + Double.toString(latitude));
                        }
                    })
                    .addOnFailureListener(new OnFailureListener() {
                        @Override
                        public void onFailure(@NonNull Exception e) {
                            int statusCode = ((ApiException) e).getStatusCode();
                            Log.e("MyApp","Failure ."+ Integer.toString(statusCode));
                            switch (statusCode) {
                                case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
                                    try {
                                        ResolvableApiException rae = (ResolvableApiException) e;
                                        rae.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
                                    } catch (IntentSender.SendIntentException sie) {
                                        Log.e("MyApp","Unable to execute request.");
                                    }
                                    break;
                                case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
                                    Log.e("MyApp","Location settings are inadequate, and cannot be fixed here. Fix in Settings.");
                            }
                        }
                    })
                    .addOnCanceledListener(new OnCanceledListener() {
                        @Override
                        public void onCanceled() {
                            Log.e("GPS","checkLocationSettings -> onCanceled");
                        }
                    });

所以这段代码会弹出位置启用提示(就像在地图中一样)。问题是在弹出对话框后,已经调用了 OnFailureListener。甚至在我点击确定或取消之前。

错误日志:

失败.6

知道为什么吗?


编辑为了明确我的问题:

为什么在弹出对话框之后,就已经调用了OnFailureListener。甚至在我单击“确定”或“取消”之前。为什么会这样?我的印象是 onsuccess/onfailurelistener 应该只在我点击 Ok 或 Cancel 之后被调用。如果我错了,那么我如何在单击确定或取消后获得响应?

谢谢

【问题讨论】:

    标签: android location


    【解决方案1】:

    由于您在 OnFailureListener 中的代码而显示位置启用提示。

    case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
        try {
            ResolvableApiException rae = (ResolvableApiException) e;
            rae.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
        } catch (IntentSender.SendIntentException sie) {
            Log.e("MyApp","Unable to execute request.");
        }
        break;
    

    状态码6 匹配LocationSettingsStatusCodes.RESOLUTION_REQUIRED 的情况,然后您通过调用startResolutionForResult 进行处理。您将在 MainActivity onActivityResult 函数中收到结果。

    基本上我的意思是,你所描述的是预期的行为。

    编辑:

    为了澄清,是 这个 代码使对话框弹出

    rae.startResolutionForResult(MainActivity.this, REQUEST_CHECK_SETTINGS);
    

    这发生在您的 OnFailureListener 中。当设备的设置不允许定位时调用 OnFailureListener,例如,如果位置设置被关闭。通过调用startResolutionForResult,您可以解决刚刚发生的错误,在这种情况下会弹出一个对话框来启用位置设置。然后,您可以在 MainActivity.onActivityResult 中回复该对话的结果。

    所以流程是

    1. 检查位置设置
    2. 如果调用了OnSuccessListener,就可以定位了,太好了!
    3. 如果调用 OnFailureListener,设备当前无法定位。检查状态码以查看错误是否可以解决
    4. 如果错误无法解决,那你就倒霉了
    5. 如果错误可以解决,请尝试解决错误
    6. 回复MainActivity.onActivityResult中的错误解决

    【讨论】:

    • 我编辑了我的问题以明确我的问题。
    猜你喜欢
    • 2018-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-04-03
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多