Android-разрешение.INTERACT_ACROSS_USERS_FULL

У меня есть большое приложение для Android.

Время от времени приложение падает с ошибкой. Я точно не знаю, когда и почему это происходит.

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

Любая помощь?

android,permissions,

20

Ответов: 5


11 ов

java.lang.SecurityException: Permission Denial: get / set для пользователя запрашивает запуск как пользователь -2, но вызывает от пользователя 0; для этого требуется андроид.передача.андроид: защитаLevel="signature"_FULL

Добавьте это Permission-Elementв свой манифест.

Для получения дополнительной информации вы можете проверить <разрешение android: name = "android.permission.INTERACT_ACROSS_USERS_FULL" android: protectionLevel = "подпись" /> .html "rel =" nofollow noreferrer "> Permission-Element

Подобно:

# | @UserIdInt            | Value  | Status     | Description |
# | --------------------- | ------ | ---------- | ------------| 
# | USER_OWNER            | 0      | deprecated | "owner" user of the device
# | USER_SYSTEM           | 0      | ok         | "system" user of the device
# | USER_ALL              | -1     | ok         | ALL users on the device
  | USER_CURRENT          | -2     | ok         | the currently active user
# | USER_CURRENT_OR_SELF  | -3     | ok         | id from which we would like to send to the current user
# | USER_NULL             | -10000 | ok         | An undefined user id

6

Чтобы обобщить этот ответ и взглянуть на источники UserHandle.java, мы видим значение идентификатора пользователя framework .

android:protectionLevel="signature"

Затем, чтобы понять, что AndroidManifest.xmlозначает, вам нужно будет прочитать страницу о элементе разрешения . Что суммируется в таблице:

введите описание изображения здесь

Итак, что вам нужно делать в android:permissionGroup=зависимости от того, какой API вам нужно поддерживать, поскольку более высокий API> 23 требует также INTERACT_ACROSS_USERS определения для ненормальных («опасных») разрешений ...

Также хорошо знать (by @CommonsWare)

Для того, чтобы быть в состоянии держать INTERACT_ACROSS_USERS, ваше приложение должно быть подписано с помощью ключа подписи в микропрограммы или он должен быть установлен на системном разделе.

Чтобы иметь возможность удерживать INTERACT_ACROSS_USERS_FULL, ваше приложение должно быть подписано ключом прошивки.


3

Такая же проблема я получал, когда я использовал billingProcessor.subscribe () или billingProcessor.purchase () с двумя параметрами как Activity и product_id продукта. Было передано значение product_id пустым .

Пожалуйста, как только убедитесь, что вы передаете значение в product_id, не пусто.


1

Одно из возможных решений - отключить автозаполнение, но оно работает только на Android Oreo. Проверить эту ссылку

Просто добавьте этот код в свое приложение:

      if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        window.decorView.importantForAutofill = 
        View.IMPORTANT_FOR_AUTOFILL_NO_EXCLUDE_DESCENDANTS;
    }

0

Я решил эту проблему на удачу. Я использовал экземпляр фрагмента singleton, который вызвал эту проблему. Когда я заменил fragment.getInstance()вызов, new fragment()он работал как шарм. фрагменты не должны использоваться в качестве синглетов и должны быть возвращены (если требуется) с сохраненным состоянием.

андроид, разрешение,
Похожие вопросы