the that studio mapview google example ensure enabled ejemplo java android google-maps-android-api-2

java - that - google maps api v2 android studio



EXCEPCIÓN FATAL: ZoomTableManager (4)

Estoy teniendo un accidente extraño y tengo problemas para encontrar algo al respecto en Google. La búsqueda de ZoomTableManager no devuelve ningún resultado.

E/AndroidRuntime﹕ FATAL EXCEPTION: ZoomTableManager Process: com.xxx.yyy, PID: 22129 java.lang.IllegalMonitorStateException: object not locked by thread before notify() at java.lang.Object.notifyAll(Native Method) at com.google.maps.api.android.lib6.gmm6.m.k.a(Unknown Source) at com.google.maps.api.android.lib6.gmm6.m.l.run(Unknown Source)


En nuestro caso, lo que cambió fue la clave utilizada para firmar la aplicación de Android (y no la clave API). Antes utilizábamos una clave de producción (almacenada en un almacén de claves). Esa clave de producción se habilitó en la Consola de API de Google ( https://console.developers.google.com ).

Configuramos un nuevo entorno de desarrollo en una máquina nueva y esa máquina no usaba la clave de producción como antes, sino que usaba la clave de depuración predeterminada de Android (almacenada en el almacén de claves de depuración predeterminado de android en $ HOME / .android / debug.keystore).

La solución fue configurar la clave de depuración predeterminada de Android, SHA1 y el nombre del paquete en la consola de Google API.

  1. Consigue el SHA1:

    keytool -v -list -keystore $ HOME / .android / debug.keystore

  2. Copie el SHA1: 27: 4C: CF: A3: E9: 75: 4A: 59: 4C: EE: 50: 21: 2B: 1C: 7B: 48: FC: 45: 4F: 77

  3. Vaya a la Consola de API de Google e ingrese el SHA1; nombre del paquete (en APIS & Auth> Credenciales> Editar aplicaciones de Android permitidas):

27: 4C: CF: A3: E9: 75: 4A: 59: 4C: EE: 50: 21: 2B: 1C: 7B: 48: FC: 45: 4F: 77; com.mypackage.name

¡Disfrutar!


La forma de solucionar este problema es solicitar la clave pública del mapa de Google para su paquete.

Pero la forma de evitar este bloqueo es verificar el valor de retorno del mapFragment = new MapFragment() y no llamar a fm.beginTransaction().replace(id, mapFragment).commit(); si el mapFragment es nulo.

Espero eso ayude.


Resultó que la causa del error era una clave de API de Google Maps no válida .

Recientemente tuvimos que cambiar el nombre del paquete de nuestra aplicación y, por lo tanto, las claves API que usamos se volvieron inválidas, ya que tiene que especificar las aplicaciones permitidas por firma y nombre del paquete.


Se IllegalMonitorStateException una IllegalMonitorStateException con ese mensaje cuando llama a obj.notify() y no tiene el mutex primitivo para obj .

Se supone que debes hacer algo como esto:

synchronized (someObj) { ... someObj.notify(); ... }

o equivalente, pero por alguna razón el código que causa el problema ha omitido el bit synchronized . (O tal vez, se ha sincronizado en un objeto diferente.)

Desafortunadamente, esto está sucediendo en algún código confuso que proporciona la implementación de la API de Google Maps. Y no has proporcionado ningún contexto. Así que es casi imposible para nosotros incluso adivinar lo que está pasando.

Le sugiero que proporcione más detalles.