【问题标题】:GooglePlayServicesUtil error dialog button does nothingGooglePlayServicesUtil 错误对话框按钮什么也不做
【发布时间】:2013-07-23 13:33:15
【问题描述】:

我正在向我的应用程序添加一个 MapFragment,并具有以下代码,改编自地图教程:

private boolean servicesConnected() {
    // Check that Google Play services is available
    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);

    // If Google Play services is available
    if (ConnectionResult.SUCCESS == resultCode) {
        // In debug mode, log the status
        Log.d("Location Updates", "Google Play services is available.");
        // Continue
        return true;

    // Google Play services was not available for some reason
    } else {
        GooglePlayServicesUtil.getErrorDialog(resultCode, this, 7).show();
        return false;
    }
}

我正在使用过时的 google play 服务在出厂重置 Galaxy tab 10.1 上进行测试。因此,当我尝试打开 MapFragment 时,我打电话给servicesConnected() 进行检查,正如预期的那样,我得到一个对话框,告诉我我需要 Google Play 服务。在对话框的底部,它有一个“获取 Google Play 服务”按钮,但是当我点击它时,它什么也不做。我的 LogCat 产生以下输出:

07-23 15:30:43.580: W/GooglePlayServicesUtil(2515): Google Play services is missing.
07-23 15:30:48.510: E/SettingsRedirect(2515): Can't redirect to app settings for Google Play services

我有以下 onConnectionFailed 方法(基本上是从 Android 开发者网站复制粘贴):

public void onConnectionFailed(ConnectionResult connectionResult) {
    /*
     * Google Play services can resolve some errors it detects.
     * If the error has a resolution, try sending an Intent to
     * start a Google Play services activity that can resolve
     * error.
     */
    if (connectionResult.hasResolution()) {
        try {
            // Start an Activity that tries to resolve the error
            connectionResult.startResolutionForResult(
                    this,
                    CONNECTION_FAILURE_RESOLUTION_REQUEST);
            /*
             * Thrown if Google Play services canceled the original
             * PendingIntent
             */
        } catch (IntentSender.SendIntentException e) {
            // Log the error
            e.printStackTrace();
        }
    } else {
        /*
         * If no resolution is available, display a dialog to the
         * user with the error.
         */
        GooglePlayServicesUtil.getErrorDialog(connectionResult.getErrorCode(), this, 7).show();
    }
}

为什么这不起作用?任何帮助都会很棒。

Here 是我正在使用的 Android 开发页面,here 也是与之相关的 SO 帖子。

编辑

我意识到我没有在设备上设置 Google 帐户,所以我设置了一个,但没有任何区别。

【问题讨论】:

    标签: android google-maps google-play-services


    【解决方案1】:

    这段代码对我有用:

    boolean checkGooglePlayServicesAvailable() {
        final int connectionStatusCode = GooglePlayServicesUtil
            .isGooglePlayServicesAvailable(getActivity());
        Log.i(DEBUG_TAG,
        "checkGooglePlayServicesAvailable, connectionStatusCode="
        + connectionStatusCode);
        if (GooglePlayServicesUtil.isUserRecoverableError(connectionStatusCode)) {
            showGooglePlayServicesAvailabilityErrorDialog(connectionStatusCode);
            return false;
        }
        Toast t = Toast.makeText(getActivity(),
            "Google Play service available", Toast.LENGTH_LONG);
        t.show();
        return true;
    }
    
    void showGooglePlayServicesAvailabilityErrorDialog(
        final int connectionStatusCode) {
        getActivity().runOnUiThread(new Runnable() {
        public void run() {
        final Dialog dialog = GooglePlayServicesUtil.getErrorDialog(
            connectionStatusCode, getActivity(),
            REQUEST_GOOGLE_PLAY_SERVICES);
            if (dialog == null) {
                    Log.e(DEBUG_TAG,
                            "couldn't get GooglePlayServicesUtil.getErrorDialog");
                    Toast.makeText(getActivity(),
                            "incompatible version of Google Play Services",
                            Toast.LENGTH_LONG).show();
                }
                //this was wrong here -->dialog.show();
           }
        });
    }
    

    【讨论】:

    • 我试过这个,它工作过一次,但很乱。所以我更改了一些其他代码,卸载了谷歌播放服务并再次尝试,它不起作用。我撤消了所有更改,但仍然无法正常工作...
    • 代码“不应该”运行到该行,但以防万一:您在 if (dialog == null) 语句中调用 dialog.show()
    • 你是对的 Ripityom;当我运行它时,我忘记摆脱它了。
    • 即使在 UI-Thread 中正确创建和显示错误对话框,结果在 Android AVD 中也是一样的:E/SettingsRedirect﹕ Can't redirect to app settings for Google Play services W/GooglePlayServicesUtil﹕ Google Play services is missing.
    【解决方案2】:

    我遇到了同样的问题。问题是对话框应该在UI线程中创建show()函数也必须在UI线程中调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 2018-08-30
      相关资源
      最近更新 更多