Подтвердить что ты не робот

Сбой перед запуском приложения: 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 (или, возможно, самого класса приложения), и он не останавливался на достигнутом.

4b9b3361

Ответ 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.