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)
- Una cola de tareas de fondo en rxjava
- Android Studio bloqueado en la pantalla de carga
- Cómo puedo iniciar la pantalla de información de la aplicación en android?
- El desplazamiento de la vista web de Android no funciona
- Android: ¿Cómo pausar y reanudar un temporizador de cuenta atrás?
- Android: evitar la recarga de WebView en rotación
- Depurando ExpandableListView de la base de datos - no funciona
- Cómo recibir la última emisión de secuencia al llamar a rx.Observable.sample ()?
- La aplicación de Android se bloquea con NullPointerException en ChoreoGrapher
- Escanear una carpeta de archivos en android para rutas de archivo
- Compartir descriptores de archivos de memoria compartida en aplicaciones / procesos android utilizando el archivo de enlace
- Variable de ajuste dentro de onDataChange en Firebase (singleValue Listener)
- Llamar a un método java desde c ++ en Android
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.
-
Obtener el SHA1:
Keytool -v -list -keystore $ HOME / .android / debug.keystore
-
Copie el archivo SHA1: 27: 4C: CF: A3: E9: 75: 4A: 59: 4C: EE: 50: 21: 2B: 1C: 7B: 48: FC: 45: 4F: 77
-
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!
- MediaController siempre se muestra en Android
- Android, encuentra todos los lugares en código para solicitar permisos