android mapview - source - Google Maps Android API V2 comprueba si GoogleMaps está instalado en el dispositivo
google maps github android (3)
Cuando utilizo Google Maps Android API V2, sigo la documentación de configuración de Google Play Services para verificar que Google Play Services esté instalado, usando el siguiente código en mi actividad principal:
@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);
}
Esto funciona bien. Sin embargo, noté que algunos de los teléfonos Android más antiguos con los que anduve por ahí (en su mayoría con versión 2.2) faltaban tanto GooglePlayServices como la aplicación de Google Maps en sí.
LogCat informará este error: API de Android de Google Maps: falta la aplicación Google Maps.
Pregunta : ¿cómo puedo realizar una comprobación similar a la anterior para conocer la disponibilidad de Google Maps en un dispositivo? En segundo lugar, si el usuario ya tiene instalado Google Maps, creo que la comprobación deberá asegurarse de que su versión instalada sea compatible con V2 de la API de Android Maps.
Actualizar Aquí está mi método setupMapIfNeeded () que se llama al final de onCreate (). Aquí es donde creo que me gustaría determinar si Google Maps está instalado y alertar al usuario, vea el bloque 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);
}
}
}
Bien, después de más pinchazos y pinchazos, me di cuenta de que solo tenía que preguntar a PackageManager si Google Maps está instalado. En mi opinión, esto debería incluirse en la guía de desarrolladores de Google Maps Android API V2 ... va a haber muchos desarrolladores que extrañen este caso y tengan usuarios frustrados.
A continuación, le indicamos cómo verificar si Google Maps está instalado y redirigir al usuario a la lista de Play Store para Google Maps si no está instalado (consulte 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();
}
};
}
Escribí una breve publicación en el blog con estos detalles: Cómo verificar si Google Maps está instalado y redirigir al usuario a Play Store
Puede verificar que GoogleMap esté disponible llamando a los métodos MapFragment.getMap () o MapView.getMap () y verificando que el objeto devuelto no sea nulo.
GoogleMap público getMap ()
El GoogleMap. Nulo si la vista del fragmento aún no está lista. Esto puede suceder si el fragmento de ciclo de vida no ha pasado por onCreateView (LayoutInflater, ViewGroup, Bundle) todavía. Esto también puede suceder si los servicios de Google Play no están disponibles. Si los servicios de Google Play se vuelven disponibles después y el fragmento ha pasado por onCreateView (LayoutInflater, ViewGroup, Bundle), al volver a llamar a este método se iniciará y devolverá GoogleMap.
Puedes leer sobre verificar la disponibilidad del mapa aquí .
if (mapIntent.resolveActivity(getPackageManager()) != null) {
...
}