Сбой перед запуском приложения: SecurityException: Разрешение: INTERACT_ACROSS_USERS_FULL
Фон
У меня есть укороченное устройство, которое является Galaxy S3 I9300, с ROM на базе Android на базе Android 4.3.
У меня никогда не было проблем с запуском приложения, над которым я работаю с этим устройством.
Проблема
со вчерашнего дня (и я ничего не менял на устройстве), каждый раз, когда я открываю приложение, он показывает очень короткое время, закрывается без какого-либо диалога сбоев, но он показывает следующий журнал:
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)
он даже не попадает в код класса, который расширяет Application...
Что я нашел
Кажется, что эта проблема очень распространена (многие об этом сообщили), но я не могу найти какое-либо решение и почему это происходит, за исключением корневого устройства.
Люди также говорят, что разрешение, которое здесь написано, фактически является системным разрешением, но я даже не слышал об этом, не говоря уже о его использовании (даже не уверен, что это такое).
Проблема в том, что приложение, над которым я работаю, не имеет ничего общего с root, плюс это сработало всего несколько дней назад.
Я попытался переустановить ROM (Omega ROM v54), а также отключить все, что связано с xposed framework. это не помогло.
Вопрос
Как исправить эту проблему? Как я узнаю, что другие пользователи не будут иметь эту проблему?
Разве это связано даже с укорененными устройствами?
EDIT: я думал, что нашел ответ, который его исправляет, выбрав "отменить USB-отладку..." в разделе разработчиков экрана настроек. сначала это работало, но позже проблема вернулась и нажала на нее больше ничего не помогло...
EDIT: Я думаю, что это просто ошибка самого приложения или ПЗУ, так как я больше не могу его воспроизвести. Это довольно странно, так как я совершенно уверен, что попытался отладить приложение и поставил точку останова на метод onCreate (или, возможно, самого класса приложения), и он не останавливался на достигнутом.
Ответы
Ответ 1
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
Эта ошибка возникает из того, где вы get/set
пользовательских/системных параметров в вашем приложении. В этом конкретном журнале ошибок отображаются ваши настройки get/set
(из вашего кода приложения) вызывает пользователя 0 (USER_OWNER
), но параметр, который вы изменяете, предназначен для пользователя -2 (USER_CURRENT
).
Вы не можете изменить настройки других пользователей без разрешения android.permission.INTERACT_ACROSS_USERS_FULL
.
Вероятно, вы не рассматриваете случай наличия другого идентификатора пользователя (между вызовом userID и userID, для которого этот параметр) для вашего кода, и вызова параметров set/get
с неправильным идентификатором пользователя (я не знаю, почему они когда это произошло - например, это может произойти, если на устройстве имеется несколько учетных записей пользователей).
Вам нужно изменить код, чтобы ввести правильный идентификатор пользователя в логику и вызвать настройки set/get
для соответствующего идентификатора пользователя (вызывающий идентификатор пользователя и идентификатор пользователя, для которого параметры были изменены, должны быть одинаковыми).
Ответ 2
Вы можете попробовать перенести apk в/system/app/и проверить, работает ли он, потому что там он будет выполнен как пользователь. После этого, возможно, вы можете сравнить оба журнала (рабочий и обычный), чтобы увидеть, где приложение останавливается.
Чтобы установить его из оболочки:
adb remount
adb push yourApp.apk /system/app/
adb reboot
Ответ 3
Переместите apk
на /system/app/
. Он не будет выполнен как пользователь 0, но он позволит вам использовать это разрешение:
android.permission.INTERACT_ACROSS_USERS_FULL
Ответ 4
Я испытал это SecurityException на часах Android Wear, и это произошло, когда я выполнил действие уведомления.
Я также не могу воспроизвести его, но заметил, что это происходит, только когда я переустановил приложение, используя IDE или adb install
. Я никогда не видел его в правильной версии, подписанной моим ключом Google Play.