2013-07-23 45 views
5

我加入一个MapFragment到我的应用程序,并有下面的代码,改编自地图教程:GooglePlayServicesUtil错误对话框,按钮不执行任何操作

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; 
    } 
} 

我测试上恢复出厂设置的Galaxy Tab 10.1与过时谷歌播放服务。因此,当我尝试打开MapFragment时,我打电话servicesConnected()进行检查,并且如预期的那样,我收到一个对话框,告诉我需要Google Play服务。在对话框的底部有一个按钮“Get 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帖子。

编辑

,我意识到我没有一个谷歌帐户设置在设备上,所以我设置一个,但它并没有区别。

回答

3

此代码为我工作:

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(); 
     } 
    }); 
} 
+0

我试过这个,它曾经工作过一次,但很混乱。所以我改变了一些其他代码,卸载谷歌播放服务,并再次尝试,它不起作用。我解开了所有的更改,但仍然无效... –

+0

现在它再次工作。不改变一个东西 –

+0

代码“不应该”运行到该行,但以防万一:在if(dialog == null)语句内调用dialog.show() – Ripityom

0

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

相关问题