Bloqueo antes de que se inicie la aplicación: SecurityException: denegación de permisos: INTERACT_ACROSS_USERS_FULL
Fondo
Tengo un dispositivo enraizado, que es Galaxy S3 I9300, con la ROM basado en acciones de Samsung, basado en Android 4.3.
Nunca tuve problemas para ejecutar una aplicación con la que estoy trabajando con este dispositivo.
- SecurityException con grantUriPermission al compartir un archivo con FileProvider
- Android SecurityException en PDF Enviar intención
- Facturación de InApp: java.lang.SecurityException Requiere READ_PHONE_STATE
- PublisherAdView.loadAd () lanzando SecurityException - getTasks () requiere android.permission.GET_TASKS
- WebView java.lang.SecurityException: No hay permiso para modificar el hilo dado
El problema
Desde ayer (y no cambié nada en el dispositivo), cada vez que abra la aplicación, se muestra por un tiempo muy corto, se cierra sin ningún diálogo de bloqueo, pero muestra el siguiente registro:
01-30 09:27:18.325: E/DatabaseUtils(2366): Writing exception to parcel 01-30 09:27:18.325: E/DatabaseUtils(2366): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL 01-30 09:27:18.325: E/DatabaseUtils(2366): at com.android.server.am.ActivityManagerService.handleIncomingUser(ActivityManagerService.java:13140) 01-30 09:27:18.325: E/DatabaseUtils(2366): at android.app.ActivityManager.handleIncomingUser(ActivityManager.java:2038) 01-30 09:27:18.325: E/DatabaseUtils(2366): at com.android.providers.settings.SettingsProvider.callFromPackage(SettingsProvider.java:607) 01-30 09:27:18.325: E/DatabaseUtils(2366): at android.content.ContentProvider$Transport.call(ContentProvider.java:279) 01-30 09:27:18.325: E/DatabaseUtils(2366): at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:273) 01-30 09:27:18.325: E/DatabaseUtils(2366): at android.os.Binder.execTransact(Binder.java:388) 01-30 09:27:18.325: E/DatabaseUtils(2366): at dalvik.system.NativeStart.run(Native Method)
Ni siquiera llega al código de la clase que extiende la aplicación …
Lo que he encontrado
Parece que este problema es muy común (muchos han informado sobre ello), pero no puedo encontrar ninguna solución y por qué se produce, aparte de tener un dispositivo con raíces.
La gente también dice que el permiso que se escribe aquí es en realidad un permiso del sistema, pero ni siquiera he oído hablar de él, y mucho menos usarlo (ni siquiera estoy seguro de lo que es).
El problema es que la aplicación en la que estoy trabajando no tiene nada relacionado con la raíz, además de que funcionó hace unos días.
He intentado reinstalar la ROM (Omega ROM v54) y también deshabilitar cualquier cosa relacionada con el marco xposed. No ayudó.
La pregunta
¿Cómo soluciono este problema? ¿Cómo sabría que otros usuarios no tendrán este problema?
¿Está incluso relacionado con dispositivos con raíces?
EDIT: pensé que he encontrado una respuesta que lo corrige, eligiendo "revoke USB debugging …" en la sección de desarrolladores de la pantalla de configuración. Parecía que funcionaba al principio, pero más tarde el problema volvió y hacer clic en no hacer nada útil más …
EDIT: Creo que es sólo un error en la aplicación en sí o la ROM, ya que no puedo reproducir más. Es bastante extraño ya que estoy seguro de que he intentado depurar la aplicación y poner un punto de interrupción en el método onCreate de la acitivity (y tal vez de la clase de aplicación en sí) y no se detuvo allí.
- Android: securityException: "el destino debe estar en el almacenamiento externo"
- Evite la excepción de seguridad al acceder a DownloadProvider
- Android en la facturación de la aplicación SecurityException "Invocación de la carpeta en una interfaz incorrecta"
- SecurityException: No se puede encontrar el campo para dex.jar
- Android: java.lang.SecurityException: Permiso Denial: inicio Intención
- Android que lee el almacenamiento externo da securityException
- El uso del escáner de código de barras de Zxing causa la excepción de seguridad
01-30 09:27:18.325: E/DatabaseUtils(2366): java.lang.SecurityException: Permission Denial: get/set setting for user asks to run as user -2 but is calling from user 0; this requires android.permission.INTERACT_ACROSS_USERS_FULL
Este error proviene de donde get/set
cualquier get/set
usuario / sistema en su aplicación. Este registro de errores en particular está mostrando la configuración que get/set
(desde el código de la aplicación) está llamando desde el usuario 0 ( USER_OWNER
), pero la configuración que está cambiando es para el usuario -2 ( USER_CURRENT
).
No puedes cambiar la configuración de otros usuarios sin el permiso android.permission.INTERACT_ACROSS_USERS_FULL
.
Probablemente no estás considerando el caso de tener ID de usuario diferente (entre el ID de usuario llamando y el ID de usuario para el que es la configuración) en tu código y llamando set/get
settings con el ID de usuario incorrecto (no sé por qué son diferentes cuando esto Sucedió – por ejemplo, podría suceder cuando hay más de una cuenta de usuario en el dispositivo).
Es necesario modificar el código para llevar el ID de usuario correcto a la lógica y llamar a la configuración set/get
para el ID de usuario apropiado (el ID de usuario que llama y el ID de usuario para el que se modifica la configuración debe ser el mismo).
Puede intentar mover el apk a / system / app / y comprobar si funciona, porque allí se ejecutará como usuario 0. Después de eso, tal vez usted puede comparar los dos registros (trabajando uno y uno regular) para ver dónde hace la aplicación Se detiene
Para instalarlo desde tu shell:
adb remount adb push yourApp.apk /system/app/ adb reboot
Mueva su apk
a /system/app/
. No se ejecutará como usuario 0, pero le permitirá utilizar este permiso:
android.permission.INTERACT_ACROSS_USERS_FULL
He experimentado esta SecurityException en un reloj Android Wear y sucedió cuando ejecuté una acción de notificación. También no puedo reproducirlo, pero me di cuenta, que sólo sucede, cuando reinstale la aplicación mediante el uso de IDE o adb install
. Nunca lo vi en una versión correcta firmada por mi clave de Google Play.