web-dev-qa-db-fra.com

Google Maps Android API V2 vérifie si GoogleMaps est installé sur l'appareil

Lorsque j'utilise Google Maps Android API V2, je suis la documentation d'installation des services Google Play pour vérifier que les services Google Play sont bien installés, à l'aide du code suivant dans mon activité principale:

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

Cela fonctionne bien. Cependant, j’ai remarqué que certains des téléphones Android les plus anciens que j’avais autour (principalement sous 2.2) manquaient à la fois de GooglePlayServices et de l’application Google Maps elle-même.

LogCat signalera cette erreur: API Google Maps Android: L'application Google Maps est manquante.

Question - Comment puis-je effectuer une vérification similaire à celle ci-dessus pour vérifier la disponibilité de Google Maps sur un appareil? Deuxièmement, si l’utilisateur a déjà installé Google Maps, je pense que la vérification devra s’assurer que sa version installée est compatible avec la V2 de l’API Android Maps.

Update Voici ma méthode setupMapIfNeeded () appelée à la fin de onCreate (). C’est là que je pense que je voudrais déterminer si Google Maps est installé et alerter l’utilisateur, voir le bloc 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);
        }
    }
}
29
DiscDev

Très bien, après avoir piqué encore plus, j'ai compris qu'il me suffisait de demander à PackageManager si Google Maps était installé. IMO, cela devrait vraiment être inclus dans le guide des développeurs de Google Maps Android API V2 ... de nombreux développeurs vont rater cette occasion et frustrer les utilisateurs.

Voici comment vérifier si Google Maps est installé et rediriger l'utilisateur vers la liste Play Store pour Google Maps si elle n'est pas installée (voir 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();
        }
    };
}

J'ai rédigé un court article de blog avec les détails suivants: Comment vérifier si Google Maps est installé et rediriger l'utilisateur vers le Play Store

52
DiscDev

Du guide Google

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

Vous pouvez vérifier que GoogleMap est disponible en appelant les méthodes MapFragment.getMap () ou MapView.getMap () et en vérifiant que l'objet renvoyé n'est pas null.

googleMap public getMap ()

La carte Google. Null si la vue du fragment n'est pas encore prête. Ce Cela peut arriver si le cycle de vie d’un fragment n’est pas passé par onCreateView (LayoutInflater, ViewGroup, Bundle) encore. Cela peut aussi se produire si les services Google Play ne sont pas disponibles. Si Google Play les services deviennent disponibles après et le fragment est parti via onCreateView (LayoutInflater, ViewGroup, Bundle), en appelant ceci La méthode à nouveau initialisera et renverra la GoogleMap.

Vous pouvez lire sur vérifier la disponibilité de la carte ici .

0
Paul Wein