API Google Android Android V2 проверяет, установлены ли GoogleMaps на устройстве

При использовании Google Maps Android API V2 я следую документации по настройкам Google Play, чтобы проверить, установлены ли сервисы Google Play, используя следующий код в моей основной деятельности:

@Override public void onResume() { checkGooglePlayServicesAvailability(); super.onResume(); } public void checkGooglePlayServicesAvailability() { int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(this); if(resultCode != ConnectionResult.SUCCESS) { Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, this, 69); dialog.setCancelable(false); dialog.setOnDismissListener(getOnDismissListener()); dialog.show(); } Log.d("GooglePlayServicesUtil Check", "Result is: " + resultCode); } 

Это прекрасно работает. Тем не менее, я заметил, что некоторые из старых телефонов Android, на которых я размещался (в основном работает 2.2), отсутствовали как GooglePlayServices, так и приложение Google Maps.

LogCat сообщит об этой ошибке: Google Maps API для Android: приложение Google Maps отсутствует.

Вопрос. Как я могу выполнить аналогичную проверку с приведенной выше для доступности Google Maps на устройстве? Во-вторых, если у пользователя уже установлен Google Maps, я думаю, что проверка должна убедиться, что их установленная версия совместима с V2 API Android Maps.

Обновление Вот мой метод setupMapIfNeeded (), который вызывается в конце onCreate (). Вот где я думаю, что я хочу определить, установлены ли Карты Google и предупреждают пользователя, см. Блок else:

 private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the map. if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.basicMap)).getMap(); if (mMap != null) { mMap.setLocationSource(this); mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(44.9800, -93.2636), 10.0f)); setUpMap(); } else { //THIS CODE NEVER EXECUTES - mMap is non-null even when Google Maps are not installed MapConstants.showOkDialogWithText(this, R.string.installGoogleMaps); } } } 

Хорошо, после того, как я все еще толкнул и подталкивал, я понял, что мне просто нужно спросить PackageManager, установлены ли карты Google. IMO, это действительно должно быть включено в руководство разработчиков Google Maps для Android API V2 … там будет много разработчиков, которые пропустили этот случай и разочаровали пользователей.

Вот как проверить, установлены ли Карты Google и перенаправить пользователя в список Play Store для карт Google, если он не установлен (см. isGoogleMapsInstalled() ):

 private void setUpMapIfNeeded() { // Do a null check to confirm that we have not already instantiated the map. if (mMap == null) { // Try to obtain the map from the SupportMapFragment. mMap = ((SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.basicMap)).getMap(); if(isGoogleMapsInstalled()) { if (mMap != null) { setUpMap(); } } else { Builder builder = new AlertDialog.Builder(this); builder.setMessage("Install Google Maps"); builder.setCancelable(false); builder.setPositiveButton("Install", getGoogleMapsListener()); AlertDialog dialog = builder.create(); dialog.show(); } } } public boolean isGoogleMapsInstalled() { try { ApplicationInfo info = getPackageManager().getApplicationInfo("com.google.android.apps.maps", 0 ); return true; } catch(PackageManager.NameNotFoundException e) { return false; } } public OnClickListener getGoogleMapsListener() { return new OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=com.google.android.apps.maps")); startActivity(intent); //Finish the activity so they can't circumvent the check finish(); } }; } 

Я написал короткую запись в блоге с этими подробностями: как проверить, установлены ли Карты Google и перенаправить пользователя в Play Маркет

Из руководства Google

 if (mapIntent.resolveActivity(getPackageManager()) != null) { ... } 

Вы можете проверить, что GoogleMap доступен, вызывая методы MapFragment.getMap () или MapView.getMap () и проверяя, что возвращаемый объект не является нулевым.

общеansible GoogleMap getMap ()

GoogleMap. Нуль, если представление fragmentа еще не готово. Это может произойти, если fragment lifecyle еще не прошел onCreateView (LayoutInflater, ViewGroup, Bundle). Это также может случиться, если услуги Google Play недоступны. Если после этого службы Google Play станут доступными, а fragment прошел через onCreateView (LayoutInflater, ViewGroup, Bundle), вызов этого метода снова инициализирует и возвращает GoogleMap.

Вы можете прочитать о проверке доступности карты здесь .

  • Как нарисовать интерактивную полилинию на маршруте google maps v2 android
  • Проложить маршрут между двумя точками, используя Google Maps Android API v2
  • Это приложение не будет запущено, если вы не обновите сервисы Google Play (через Bazaar)
  • Захват снимка экрана Google API для Android API V2
  • API Карт Google v2 SupportMapFragment внутри ScrollView - пользователи не могут прокручивать карту по вертикали
  • API Android Google Maps v2 - сбой кода образца
  • API Android Android версии 2 с пользовательскими маркерами
  • java.lang.noclassdeffounderror: com.google.android.gms.R $ стиль
  • Android Google Maps API V2 Увеличить до текущего местоположения
  • Ошибка авторизации API Google Android v2
  • Как загрузить сервисы Google Play в Android-эмуляторе?
  • Interesting Posts

    Событие SelectedIndexChanged DropDownList не срабатывает

    Как использовать NSXMLParser для синтаксического анализа элементов parent-child с одинаковым именем

    Можно ли использовать графический процессор nVidia для рендеринга графики, если монитор подключен к видеопорту материнской платы?

    MySQL – SELECT WHERE поле IN (подзапрос) – Чрезвычайно медленно почему?

    Как отредактировать настройки реестра клавиатуры для ключей с 3-символьными кодами сканирования?

    Мой SearchIndexer.exe падает каждый день

    ClassNotFoundException возвращается для всех плагинов

    Ubuntu, управлять запуском init

    textview.getLineCount всегда 0 в android

    Java Swing – как показать панель поверх другой панели?

    Получить текущего первого ответчика без использования частного API

    Может ли полный файл подкачки замедлить работу моего ПК?

    Как возобновить fragment из BackStack, если он существует

    Клиент удаленного рабочего стола в Windows 7 Full Screen Issue

    Вызов обратных вызовов с помощью Mockito

    Давайте будем гением компьютера.