EXCEPCIÓN FATAL: ZoomTableManager

Estoy recibiendo un extraño accidente y estoy teniendo problemas para encontrar algo sobre él 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.mka(Unknown Source) at com.google.maps.api.android.lib6.gmm6.mlrun(Unknown Source) 

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 de API que utilizamos se convirtieron en no válidas, ya que tienes que especificar las aplicaciones permitidas por firma y nombre del paquete.

Un IllegalMonitorStateException con ese mensaje sucede cuando usted llama obj.notify() y usted no está sosteniendo el mutex primitivo para el obj .

Se supone que debes hacer algo como esto:

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

O equivalente, pero por algunas razones el código que causa el problema ha dejado fuera el bit synchronized . (O tal vez, se ha sincronizado en un objeto diferente.)

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

Le sugiero que proporcione más detalles.

La forma de solucionar este problema es solicitar la clave pública google map para su paquete.

Pero la forma de evitar este bloqueo es comprobar el valor de retorno de la llamada mapFragment = new MapFragment() y no llamar a fm.beginTransaction().replace(id, mapFragment).commit(); Si el mapFragment es null.

Espero eso ayude.

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

Hemos creado un nuevo entorno de desarrollo en una máquina nueva y esa máquina no estaba utilizando la clave de producción como antes, sino que estaba usando 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 API de Google.

  1. Obtener el SHA1:

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

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

  3. Ve a la Consola de la API de Google e ingresa el nombre del paquete SHA1; en APIS & Auth> Credenciales> Editar aplicaciones 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!

  • RxJava noClassDefFoundError: rx.plugins.RxJavaPlugins en la API 16
  • Trabajos de fondo de Android para la sincronización con un servicio web
  • ¿Cómo evito esta espera ocupada?
  • Android: ¿Hay una ventaja al establecer compileSdkVersion en una versión inferior a la última API?
  • ¿Qué es getSeekableFileDescriptor () en este documento android?
  • SetNumStars y setRating no funcionan en RatingBar personalizado
  • Cómo generar un código de hash exclusivo para la entrada de cadena en android ...?
  • Medición del rendimiento en Android
  • Android Studio: el emulador de tabletas no muestra la resolución correcta
  • Excepción al intentar guardar el estado del fragmento anidado
  • ¿Cómo conectarse vía HTTPS usando Jsoup?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.