2012-12-20 9 views
13

Wenn Sie die neue Google Maps V2-API für Android verwenden, wird dem Nutzer eine Fehlermeldung angezeigt, wenn auf seinem Gerät die Google Play (Services) -App nicht installiert ist. Ich frage mich, ob es irgendwie möglich ist, den Stil dieser Fehlermeldung zu überschreiben, um es weniger störend zu machen und das App-Styling passender zu gestalten.So stylen Sie den Google Play-Dienstfehler auf Android

Dies ist, was der Fehler wie folgt aussieht:

This app won't run unless you update Google Play services.

+1

Wie bringen Sie das auf? Das Ergebnis von 'getErrorDialog()' ist nicht annähernd so störend. Davon abgesehen habe ich nichts dokumentiert, was diesen Teil der Benutzeroberfläche betrifft. – CommonsWare

+0

Ich habe nur das Map-Fragment in ein XML-Layout eingebettet. Es zeigt diesen Inhalt an, wenn die Wiedergabedienste fehlen. Ich wusste nichts über die Fehlerdialogoption! Das scheint eine gute Lösung zu sein. – twaddington

+1

Ja, ich würde die 'getErrorDialog()' Route gehen. Dieser ganze Teil des Maps V2-Erlebnisses ist nervtötend, aber "getErrorDialog()" schien mir am wenigsten zu nützen. :-) – CommonsWare

Antwort

24

Nachdem ich einige untersuchen, habe ich festgestellt, dass die beste Lösung für das Vorhandensein der Google Play Services-Bibliothek und zeigt einen benutzerdefinierten Fehler manuell zu überprüfen war Dialog- oder Fehlerlayout. Es gibt einige Hilfsmethoden in GooglePlayServicesUtil, die das ziemlich einfach machen.

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    int statusCode = 
      GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); 
    if (statusCode == ConnectionResult.SUCCESS) { 
     // Continue with your regular activity/fragment configuration. 
    } else { 
     // Hide the map fragment so the default error message is not 
     // visible.  
     findViewById(R.id.map).setVisibility(View.GONE); 

     // Show a custom error message 
     showErrorMessage(statusCode); 
    } 
} 

private void showErrorMessage(final int statusCode) { 
    // I've outlined two solutions below. Pick which one works best for 
    // you and remove the if-block. 
    boolean showDialog = false; 

    if (showDialog) { 
     // This is the easiest method and simply displays a pre-configured 
     // error dialog 
     GooglePlayServicesUtil.getErrorDialog(statusCode, this, 0).show(); 
    } else { 
     // Show a completely custom layout 
     findViewById(R.id.error).setVisibility(View.VISIBLE); 

     // Wire up the button to install the missing library 
     Button errorButton = (Button) findViewById(R.id.error_button); 
     errorButton.setOnClickListener(new OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       try { 
        // Perform the correct action for the given status 
        // code! 
        GooglePlayServicesUtil.getErrorPendingIntent(
          statusCode, getActivity(), 0).send(); 
       } catch (CanceledException e1) { 
        // Pass 
       } 
      } 
     }); 
    } 
} 
+0

Und wie man geeigneten Text für Knopf einstellt? –

+0

Um die Warnung anzuzeigen, ist es besser, zuerst 'GooglePlayServicesUtil.isUserRecoverableError (statusCode)' zu überprüfen – bryant1410

0
  • GooglePlayServiceUtil veraltet. Betrachten Sie GoogleApiAvailability für die neuesten Schnittstellen.
  • Verwenden Sie vorzugsweise die bereitgestellten DialogFragment anstelle des Fehlers AlertDialog direkt, so dass es ordnungsgemäß von der Aktivität verwaltet werden kann.

    public static boolean checkPlayServices(FragmentActivity activity) { 
        GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance(); 
        int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(activity); 
    
        if (resultCode != ConnectionResult.SUCCESS) { 
         if (googleApiAvailability.isUserResolvableError(resultCode)) { 
          // "user resolvable" means Google Play is available to download the last version of Play Services APK 
          // This will open Google dialog fragment displaying the proper message depending on "resultCode" 
          googleApiAvailability.showErrorDialogFragment(activity, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST); 
         } else { 
          // Should not happen. This device does not support Play Services. 
          // Let's show an ultimate warning. 
          MyCustomPlayServicesErrorDialogFragment playServicesErrorDialog = new MyCustomPlayServicesErrorDialogFragment(); 
          playServicesErrorDialog.show(activity.getFragmentManager(), TAG); 
         } 
         return false; 
        } 
        return true; 
    }