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

Фон

У меня есть рутованное устройство Galaxy S3 I9300 с прошивкой Samsung на базе 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, к тому же оно работало всего несколько дней назад.

Я пытался переустановить ПЗУ (Omega ROM v54), а также отключить все, что связано с xposed framework. это не помогло.

Вопрос

Как решить эту проблему? Откуда мне знать, что у других пользователей не будет этой проблемы?

Это вообще связано с рутированными устройствами?


РЕДАКТИРОВАТЬ: я думал, что нашел ответ, который исправляет это, выбрав «отменить отладку USB ...» в разделе разработчиков на экране настроек. Сначала казалось, что это работает, но позже проблема вернулась, и нажатие на нее больше не помогало...


РЕДАКТИРОВАТЬ: я думаю, что это просто ошибка самого приложения или ПЗУ, так как я больше не могу ее воспроизвести. Это довольно странно, так как я совершенно уверен, что пытался отладить приложение и поставить точку останова в методе onCreate активности (и, возможно, самого класса приложения), и это не остановилось на этом.


person android developer    schedule 30.01.2014    source источник
comment
Если у вас есть корневое устройство, вы можете выполнить системное разрешение. Что произойдет, если вы добавите необходимое разрешение в свой манифест? Это все еще вызывает ошибку? Может быть, попробуйте добавить ACRA в свой проект Android и посмотреть, сможет ли он отследить ошибку для вас. ACRA можно найти здесь.   -  person ChuongPham    schedule 27.03.2014
comment
Я начинаю думать, что это все из-за ошибки, из-за которой текущая активность завершается без реального сбоя. Однако это странно, потому что я помню, как пытался отладить и поставить точку останова для активности, и увидел, что она даже не остановилась на методе onCreate(). Теперь я понятия не имею, исправлена ​​ли проблема, но я больше не могу воспроизвести проблему. Я понятия не имею, что происходит сейчас. Возможно, это также связано с тем, что я обновил ПЗУ на своем устройстве, и больше не вижу этой проблемы.   -  person android developer    schedule 27.03.2014
comment
Хорошо. Давайте оставим этот пост открытым и посмотрим, есть ли у кого-нибудь еще такая же ошибка, как у вас. ;)   -  person ChuongPham    schedule 27.03.2014
comment
Я бы временно добавил это разрешение   -  person Taylor Courtney    schedule 11.02.2016
comment
Вы смотрели на этот вопрос? stackoverflow.com/a/28134444/3585278   -  person Danieboy    schedule 21.07.2016
comment
@Daniboy Что дает разрешение? Пользователю не показывается? Я не думаю, что что-либо в приложении требует этого. Ведь это произошло только на кастомной прошивке на моем устройстве, а не на других.   -  person android developer    schedule 22.07.2016
comment
Честно говоря, это просто казалось актуальным вопросом, который мог бы помочь с этой проблемой. Извините, если это не оказало никакой помощи.   -  person Danieboy    schedule 22.07.2016
comment
@Daniboy Это было давно. У меня больше нет этой проблемы. Мне просто было интересно узнать об этом разрешении теперь, когда вы снова написали об этом.   -  person android developer    schedule 22.07.2016
comment
Не могли бы вы поделиться своим манифестом?   -  person Jonas Köritz    schedule 21.11.2016
comment
@JonasKöritz Я не могу. Я даже не помню, в каком приложении у меня была эта проблема.   -  person android developer    schedule 22.11.2016
comment
Это устарело. У меня больше нет этой проблемы.   -  person android developer    schedule 31.03.2017


Ответы (4)


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.

Вы, вероятно, не рассматриваете случай наличия разных идентификаторов пользователя (между вызовом идентификатора пользователя и идентификатора пользователя, для которого предназначена настройка) в вашем коде и вызовом настроек set/get с неправильным идентификатором пользователя (я не знаю, почему они разные, когда это произошло - например, это может произойти, когда на устройстве имеется более одной учетной записи пользователя).

Вам нужно изменить код, чтобы принять правильный идентификатор пользователя в логику и вызвать настройки set/get для соответствующего идентификатора пользователя (идентификатор вызывающего пользователя и идентификатор пользователя, для которого изменяются настройки, должны быть одинаковыми).

person iVoid    schedule 31.03.2017
comment
Я собираюсь закрыть эту ветку вопросов, потому что у меня больше нет этого устройства, и даже когда оно у меня было, в какой-то момент эта проблема перестала возникать. - person android developer; 31.03.2017

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

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

adb remount
adb push yourApp.apk /system/app/
adb reboot
person Guillermo Merino    schedule 30.03.2014
comment
приложение не использует никаких специальных разрешений. это не обязательно должно быть системным приложением. в любом случае, я думаю, что это была просто ошибка в приложении или самом ПЗУ, поскольку я больше не могу воспроизвести эту проблему. - person android developer; 30.03.2014
comment
@androiddeveloper: я столкнулся с этой проблемой за последние несколько дней, но не могу найти никаких решений или обходных путей. Не могли бы вы сообщить мне, как вы решили эту проблему. - person Roll no1; 02.01.2015
comment
@ Rollno1 Я ничего не исправлял. Такой вид закрепился со временем. Возможно, дело в обновлениях SDK, или в IDE, или в самой ОС Android. Мне жаль, что я не могу помочь в этом. - person android developer; 02.01.2015
comment
@androiddeveloper: я обнаружил проблему, так как использую библиотеку с настраиваемым разрешением, которую мне не хватает для добавления в основной проект. - person Roll no1; 06.01.2015

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

android.permission.INTERACT_ACROSS_USERS_FULL
person Swing    schedule 11.08.2014
comment
но я не использую это разрешение и не хочу, чтобы пользователи делали приложение системным. - person android developer; 11.08.2014

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

person Pete    schedule 16.12.2014