Сбой перед запуском приложения: SecurityException: Разрешение: INTERACT_ACROSS_USERS_FULL

Задний план

У меня есть укороченное устройство, которое Galaxy S3 I9300, с ПЗУ на базе 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 (или, возможно, самого класса приложения), и это не остановилось.

Solutions Collecting From Web of "Сбой перед запуском приложения: SecurityException: Разрешение: INTERACT_ACROSS_USERS_FULL"

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

Вы можете попробовать перенести apk в / system / app / и проверить, работает ли он там, потому что там он будет выполнен как пользователь 0. После этого, возможно, вы можете сравнить оба журнала (рабочий и обычный), чтобы узнать, где приложение останавливается.

Чтобы установить его из своей оболочки:

 adb remount adb push yourApp.apk /system/app/ adb reboot 

Переместите ваш apk в /system/app/ . Он не будет выполнен как пользователь 0, но он позволит вам использовать это разрешение:

 android.permission.INTERACT_ACROSS_USERS_FULL 

Я испытал это SecurityException на Android Wear, и это произошло, когда я выполнил действие уведомления. Я также не могу воспроизвести его, но заметил, что это происходит только тогда, когда я переустановил приложение с помощью установки IDE или adb install . Я никогда не видел его в правильной версии, подписанной моим ключом Google Play.