android - traducir - bloqueo antes de que se inicie la aplicación: SecurityException: denegación de permiso: INTERACT_ACROSS_USERS_FULL
request permission android example (4)
Experimenté esta SecurityException en un reloj de Android Wear y sucedió cuando ejecuté una acción de notificación. Tampoco puedo reproducirlo, pero me di cuenta de que solo sucede cuando reinstalé la aplicación utilizando el IDE o adb install
. Nunca lo vi en una versión correcta firmada por mi clave de Google Play.
Fondo
Tengo un dispositivo rooteado, que es Galaxy S3 I9300, con ROM de Samsung, basado en Android 4.3.
Nunca tuve problemas para ejecutar una aplicación en la que estoy trabajando con este dispositivo.
El problema
Desde ayer (y no cambié nada en el dispositivo), cada vez que abro la aplicación, se muestra durante 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 lo han informado), pero no puedo encontrar ninguna solución y por qué ocurre, aparte de tener un dispositivo rooteado.
La gente también dice que el permiso que está escrito aquí es en realidad un permiso del sistema, pero nunca escuché de él, y mucho menos lo uso (ni siquiera estoy seguro de qué 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 solo unos días.
He intentado volver a instalar la ROM (Omega ROM v54) y también deshabilitar todo lo relacionado con el marco xposed. no sirvió de nada
La pregunta
¿Cómo soluciono este problema? ¿Cómo sabría que otros usuarios no tendrán este problema?
¿Está incluso relacionado con dispositivos rooteados?
EDITAR: pensé que había encontrado una respuesta que lo solucionaba, seleccionando "revocar depuración USB ..." en la sección de desarrolladores de la pantalla de configuración. Al principio pareció funcionar, pero luego el problema volvió a aparecer y hacer clic en él ya no servía de nada ...
EDITAR: Creo que es solo un error en la aplicación o en la ROM, ya que no puedo reproducirla más. Es bastante extraño ya que estoy bastante seguro de que he intentado depurar la aplicación y poner un punto de interrupción en el método onCreate de la actividad (y tal vez de la propia clase de la aplicación) y no se detuvo ahí.
Mueve tu apk
a /system/app/
. No se ejecutará como usuario 0, pero le permitirá utilizar este permiso:
android.permission.INTERACT_ACROSS_USERS_FULL
Puede intentar mover la apk a / system / app / y verificar si funciona, ya que allí se ejecutará como usuario 0. Después de eso, tal vez pueda comparar ambos registros (uno en funcionamiento y uno normal) para ver dónde está la aplicación. se detiene
Para instalarlo desde tu shell:
adb remount
adb push yourApp.apk /system/app/
adb reboot
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 usuario / configuración del sistema en su aplicación. Este registro de errores en particular muestra que la configuración de 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é considerando el caso de tener diferentes ID de usuario (entre llamar a ID de usuario y ID de usuario para las que está configurada) en su código y llamar a set/get
configuraciones con la ID de usuario incorrecta (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).
Debe modificar el código para llevar el ID de usuario correcto a la lógica y llamar a la configuración set/get
el ID de usuario adecuado (el ID de usuario que llama y el ID de usuario para los que se modifica la configuración debería ser el mismo).