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.

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í.

 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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.