android - 为什么 LocationSettingsResult startResolutionForResult 不调用 onActivityResult?

标签 android google-play-services

我看过这个问答 LocationSettingsRequest dialog - onActivityResult() skipped .这不是同一个问题,因为一切都已经在 Activity 中完成了。

使用的代码几乎是 Google Play 服务示例中给出的代码。

我有一个 Activity ,LocationActivity ,它连接到 GoogleApiClient 以获取用户的位置。连接后,我创建一个 LocationSettingsRequest以确保位置设置已打开。该 Activity 正在实现ResultCallback<LocationSettingsResult> .

ResultCallback<LocationSettingsResult>.onResult()被称为如果result.getStatus().getStatusCode() == LocationSettingsStatusCodes.RESOLUTION_REQUIRED然后status.startResolutionForResult(this, REQUEST_CHECK_SETTINGS)被调用并显示对话框。 问题,不管选什么,onActivityResult()永远不会被调用。

@Override
public void onConnected(Bundle connectionHint) {
    Log.i(TAG, "GoogleApiClient connected");
    LocationSettingsRequest.Builder builder = new LocationSettingsRequest.Builder()
        .addLocationRequest(new LocationRequest().setPriority(LocationRequest.PRIORITY_LOW_POWER));

    PendingResult<LocationSettingsResult> result =
        LocationServices.SettingsApi.checkLocationSettings(googleApiClient, builder.build());

    result.setResultCallback(this);
}

.

@Override
public void onResult(LocationSettingsResult result) {
    final Status status = result.getStatus();
    Log.d(TAG, "onResult() called with: " + "result = [" + status.getStatusMessage() + "]");
    switch (status.getStatusCode()) {
        case LocationSettingsStatusCodes.SUCCESS:
            getLocation();
            break;
        case LocationSettingsStatusCodes.RESOLUTION_REQUIRED:
            // Location settings are not satisfied. But could be fixed by showing the user
            // a dialog.
            try {
                // Show the dialog by calling startResolutionForResult(),
                // and check the result in onActivityResult().
                status.startResolutionForResult(this, REQUEST_CHECK_SETTINGS);
            } catch (IntentSender.SendIntentException e) {
                Log.d(TAG, "", e);
                // Ignore the error.
            }
            break;
        case LocationSettingsStatusCodes.SETTINGS_CHANGE_UNAVAILABLE:
            showManualInputDialog();
            break;
    }
}

我从来没有到过这里:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "onActivityResult() called with: " + "requestCode = [" + requestCode + "], resultCode = [" + resultCode + "], data = [" + data + "]");
    switch (requestCode) {
        case REQUEST_CODE_RESOLUTION:
            retryConnecting();
            break;
        case REQUEST_CHECK_SETTINGS:
            if (resultCode == Activity.RESULT_OK) {
                getLocation();
            } else {
                showManualInputDialog();
            }
            break;
        default:
            super.onActivityResult(requestCode, resultCode, data);
            break;
    }
}

顺便说一句。它在我的 S3 上运行了几次。据我所知,当我选择不再询问时它就停止了工作。但是,它从未在模拟器或 Tab 10 上运行过,而且在我的 S3 上也不再运行。

最佳答案

如果您在 Fragment 中运行此代码,则不要使用 startResolutionForResult()。而是使用 startIntentSenderForResult(status.getResolution().getIntentSender(), REQUEST_CODE_LOCATION_SETTING, null, 0, 0, 0, null);

和 fragment 中的重写器 onaActivityResult()。 结果将仅传递给此方法。

关于android - 为什么 LocationSettingsResult startResolutionForResult 不调用 onActivityResult?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34361904/

相关文章:

android - Dagger2 不生成 Dagger 类

java - 我放入自定义数组适配器后 ListView 崩溃

android - 运行 wear 模块时获取 "more than one library with package name ' com.google.android.gms'"

android - 更新到修订版 30 后缺少 "<sdk>/extras/google/google_play_services/libproject"文件夹

android - 意外的顶级异常 Google Play 服务

android - Google billing 消耗品和非消耗品

java - 具有任意 JSON 键的 Jackson ObjectMapper

android - 使用 GreenDao 时 INSTALL_FAILED_DEXOPT

Android 设备不会出现在 DDMS 中

Android:Google 登录 - 'DEFAULT_SIGN_IN' 和 'DEFAULT_GAMES_SIGN_IN' 之间的区别