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

后端 未结 3 1244
难免孤独
难免孤独 2020-12-02 10:28

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 th

相关标签:
3条回答
  • 2020-12-02 11:18

    You can verify that the GoogleMap is available by calling the MapFragment.getMap() or MapView.getMap() methods and checking that the returned object is not null.

    public GoogleMap getMap()

    The GoogleMap. Null if the view of the fragment is not yet ready. This can happen if the fragment lifecyle have not gone through onCreateView(LayoutInflater, ViewGroup, Bundle) yet. This can also happen if Google Play services is not available. If Google Play services becomes available afterwards and the fragment have gone through onCreateView(LayoutInflater, ViewGroup, Bundle), calling this method again will initialize and return the GoogleMap.

    You can read about verify map availability here.

    0 讨论(0)
  • 2020-12-02 11:24

    From Google guide

    if (mapIntent.resolveActivity(getPackageManager()) != null) {
        ...
    }
    
    0 讨论(0)
  • 2020-12-02 11:28

    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

    0 讨论(0)
提交回复
热议问题