GooglePlayServicesUtil.getErrorDialog is null

后端 未结 4 1355
失恋的感觉
失恋的感觉 2020-12-05 06:27

I\'m using ACRA (arca.ch) to generate automatic error reports.

I just released a new version of my app using Google Maps Android API v2. I\'m getting an error repor

相关标签:
4条回答
  • 2020-12-05 07:09

    An update of the answer by @Nevermore, since GooglePlayServicesUtil methods are deprecated in favour of GoogleApiAvailability:

    GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
    int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(activity.getApplicationContext());
    if (resultCode == ConnectionResult.SUCCESS) {
        activity.selectMap();
    } else if (resultCode == ConnectionResult.SERVICE_MISSING ||
               resultCode == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED ||
               resultCode == ConnectionResult.SERVICE_DISABLED) {
        Dialog dialog = googleApiAvailability.getErrorDialog(activity, resultCode, 1);
        dialog.show();
    }
    

    Note the order of the first two parameters in getErrorDialog() has been switched around in the GoogleApiAvailability implementation.

    0 讨论(0)
  • 2020-12-05 07:14

    Based on Rahim's code, I add the capability of preventing the user to dismiss the Google Play Services dialog (by hitting the back button) and continue using the app without Google Play Services installed:

    private void checkGooglePlayServicesAvailable() {
        int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
        if (status != ConnectionResult.SUCCESS) {
            if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
                Dialog dialog = GooglePlayServicesUtil.getErrorDialog(status, this, 0);
                dialog.setOnCancelListener(new DialogInterface.OnCancelListener() {
                    @Override
                    public void onCancel(DialogInterface dialogInterface) {
                        MainActivity.this.finish();
                    }
                });
                dialog.show();
            } else {
                Toast.makeText(this, "This device is not supported.", Toast.LENGTH_LONG).show();
                finish();
            }
        }
    }
    
    0 讨论(0)
  • 2020-12-05 07:18

    Seems like you have to check with isUserRecoverableError before trying to display the dialog.

      int status = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this);
      if (status != ConnectionResult.SUCCESS) {
        if (GooglePlayServicesUtil.isUserRecoverableError(status)) {
          GooglePlayServicesUtil.getErrorDialog(status, this, 
          REQUEST_CODE_RECOVER_PLAY_SERVICES).show();
        } else {
          Toast.makeText(this, "This device is not supported.", 
              Toast.LENGTH_LONG).show();
          finish();
        }
      }
    
    0 讨论(0)
  • 2020-12-05 07:24

    Google suggests (also in docs) calling getErrorDialog() if the result code is SERVICE_MISSING, SERVICE_VERSION_UPDATE_REQUIRED or SERVICE_DISABLED. So it may be that the last possible status code (SERVICE_INVALID) is what's causing trouble.

    I'm using the following code and so far it seems to work ok (testing in emulator, platform 2.3.3):

    int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity.getApplicationContext());
    if (resultCode == ConnectionResult.SUCCESS) {
        activity.selectMap();
    } else if (resultCode == ConnectionResult.SERVICE_MISSING ||
               resultCode == ConnectionResult.SERVICE_VERSION_UPDATE_REQUIRED ||
               resultCode == ConnectionResult.SERVICE_DISABLED) {
        Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, activity, 1);
        dialog.show();
    }
    
    0 讨论(0)
提交回复
热议问题