Как настроить ошибку Служб Google Play на Android

При использовании нового API Google Maps V2 на Android пользователь увидит сообщение об ошибке, если на их устройстве не установлено приложение Google Play (Сервисы). Мне интересно, возможно ли каким-то образом переопределить стиль этого сообщения об ошибке, чтобы сделать его менее резким и подходящим для стиля приложения более подходящим образом.

Это выглядит так:

Это приложение не будет работать, если вы не обновите службы Google Play.

Проведя некоторое расследование, я решил, что лучшим решением было вручную проверить наличие библиотеки Google Play Services и отобразить пользовательский диалог ошибок или макет ошибки. В GooglePlayServicesUtil есть некоторые полезные методы, которые делают это довольно простым.

 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 } } }); } } 
  • GooglePlayServiceUtil устарел. Посмотрите на GoogleApiAvailability для последних интерфейсов.
  • Предпочитайте использовать предоставленный DialogFragment вместо ошибки AlertDialog напрямую, чтобы он мог правильно управляться с помощью действия.

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