Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Google Maps Android API V2 check if GoogleMaps are installed on device

When using Google Maps Android API V2 I'm following the Google Play Services setup documentation to make a check to ensure that Google Play Services are installed, using the following code in my main Activity:

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

This works fine. However, I noticed some of the older Android phones I have laying around (mostly running 2.2) were missing both GooglePlayServices as well as the Google Maps app itself.

LogCat will report this error: Google Maps Android API: Google Maps application is missing.

Question - how can I perform a similar check to the one above for the availability of Google Maps on a device? Secondly, if the user already has Google Maps installed I think the check will need to make sure their installed version is compatible with V2 of the Android Maps API.

Update Here is my setupMapIfNeeded() method which is called at the end of onCreate(). This is where I think I'd want to determine if Google Maps is installed and alert the user, see the else block:

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);         }     } } 
like image 231
DiscDev Avatar asked Dec 08 '12 15:12

DiscDev


People also ask

How do I know if Google Maps is loaded Android?

If you are using if (google. maps) {...} and it gives you a reference error if google is undefined (i.e. if the API didn't load). Then you can use this, if (typeof google === 'object' && typeof google. maps === 'object') {...} to check if it loaded successfully.

Is Google Maps pre installed on Android?

Google Maps Go is pre-installed on Android Oreo (Go edition) devices. It's also available on the Play Store.

Where is your Android maps API key embedded in the app?

Go to the Google Maps Platform > Credentials page. On the Credentials page, click Create credentials > API key. The API key created dialog displays your newly created API key.


2 Answers

Alright after more poking and prodding I realized I just need to ask PackageManager if google maps are installed. IMO this should really be included in the Google Maps Android API V2 developers guide...there are going to be lots of devs that miss this case and have frustrated users.

Here's how to check if Google Maps are installed and re-direct the user to the Play Store listing for google maps if it's not installed (see 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();         }     }; } 

I wrote up a short blog post with these details: How to check if Google Maps are installed and redirect user to the Play Store

like image 130
DiscDev Avatar answered Sep 29 '22 04:09

DiscDev


From Google guide

if (mapIntent.resolveActivity(getPackageManager()) != null) {     ... } 
like image 27
Oleksandr Kruk Avatar answered Sep 29 '22 03:09

Oleksandr Kruk