trazar - Cómo detectar un dispositivo Android si es compatible con la API de Google Maps
obtener ubicacion android studio 2017 (8)
Actualmente estoy desarrollando una aplicación para Android que utiliza el mapa de Google API.
Me pregunto si todos los dispositivos Android son compatibles con la API de mapas, ya que esta API es una API optinal y es un complemento de la plataforma.
Me preocupa que mi aplicación no pueda ejecutarse en ese dispositivo.
Lo que necesito saber es detectar mediante programación si la API del mapa de soporte del dispositivo, detectar la excepción y hacer otra cosa.
Debido a que el uso de la capacidad de mapas es solo una de las funciones de mi aplicación, me gustaría que aquellos dispositivos que no son compatibles con la API de mapas puedan descargar y ejecutar mi aplicación sin afectar otras funciones de mi aplicación.
Cualquier comentario o sugerencia son bienvenidos.
Esto funcionó para mí:
Use la biblioteca de usos (¿no documentada?) Uses android: name = "com.google.android.maps" android: required = "false" en el manifiesto. Esto permitirá la instalación en un dispositivo no compatible con maps-api.
Entonces revisa esto: http://android-developers.blogspot.com.ar/2009/01/can-i-use-this-intent.html
Aún puede tener todo el código de mapas y api intacto en la aplicación (no necesita 2 versiones), simplemente codifique su interfaz de usuario para evitar ejecutarla. (En mi caso he atenuado una preferencia). Como se señaló, la técnica descrita anteriormente efectivamente predice algo que no funcionará y le permite responder (no FC), en lugar de solo reaccionar a un problema.
Gracias por toda la ayuda de vuestros chicos! ¡Todas tus sugerencias son útiles para mí!
Escribí una aplicación simple que es capaz de implementarse en el emulador de API None-Google-Map y detectar la presencia de la API de Google de forma problemática.
Lo que hice fue que especificaba <uses-library android:name="com.google.android.maps" android:required="false" />
(pero el atributo "requerido" de Android solo funciona para 2.1 y no funciona para 1.6. Tendré que averiguar por qué. porque cuando miré la documentación, dice que este atributo está respaldado por 1.6)
Por lo tanto, soy capaz de desplegar la aplicación en el emulador.
En segundo lugar, creé una actividad de mapa que se llama HelloMaps en mi actividad principal
try{
mapActivity = new Intent(TestApp.this, HelloMaps.class);
startActivityForResult(mapActivity, 0);
}catch(NoClassDefFoundError e){
(Toast.makeText(TestApp.this, "Google Map API not found", Toast.LENGTH_LONG)).show();
}
Esto detectará la excepción y me dirá que el dispositivo no pudo ejecutar la actividad del mapa.
He utilizado la siguiente solución además de la descrita
<uses-library android:name="com.google.android.maps" android:required="false"/>
en otras respuestas:
public void mapClick(View view)
{
try
{
// check if Google Maps is supported on given device
Class.forName("com.google.android.maps.MapActivity");
this.startActivity(new Intent(this, MyMapActivity.class));
}
catch (Exception e)
{
e.printStackTrace();
UIUtils.showAlert(this, R.string.google_maps_not_found);
}
}
La API opcional solo se aplica al emulador por lo que sé. Las 2 versiones diferentes de los niveles de API son solo para el emulador, los dispositivos reales deben tener todos los mapas API, creo
Necesitaba ver si la biblioteca existía antes de intentar cualquier llamada, para poder llenar las preferencias relevantes de antemano. Aquí está el código que se me ocurrió para comprobar.
public static boolean hasSystemSharedLibraryInstalled(Context ctx,
String libraryName) {
boolean hasLibraryInstalled = false;
if (!TextUtils.isEmpty(libraryName)) {
String[] installedLibraries = ctx.getPackageManager()
.getSystemSharedLibraryNames();
if (installedLibraries != null) {
for (String s : installedLibraries) {
if (libraryName.equals(s)) {
hasLibraryInstalled = true;
break;
}
}
}
}
return hasLibraryInstalled;
}
Y luego com.google.android.maps
si com.google.android.maps
está instalado.
Si está utilizando googlemaps en su aplicación, debe incluir lo siguiente en su archivo manifest.xml dentro de las etiquetas de la aplicación
<uses-library android:name="com.google.android.maps" />
Esto evitará que un usuario instale su aplicación o la vea en el mercado, sin saber cuál, tal vez ambos.
Tienes razón, algunos dispositivos, como Archos 5IT y Some Tablet no tienen Google Maps, Android Market, etc.
Aquí está mi código. Mapa de Bélgica es una MapActivity:
try {
Intent i = new Intent(InfoGare.this, BelgianMap.class);
startActivityForResult(i, 0);
}
catch(ActivityNotFoundException e) {
Toast.makeText(context, "Google Map not found", Toast.LENGTH_LONG).show();
}
Pero tal vez haya otra forma de encontrarlo en la creación de su aplicación y mostrar un mensaje. Eso podría ser mejor.
Usando adb
, Para imprimir todas las bibliotecas del sistema:
adb shell cmd package list libraries
Si su dispositivo es compatible con Google Maps, verá esta línea:
library:com.google.android.maps