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 

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

java.lang.SecurityException: Permission Denial: get / set для пользователя запрашивает запуск как пользователь -2, но вызывает от пользователя 0; это требует android.permission.INTERACT_ACROSS_USERS_FULL

Добавьте этот android:protectionLevel="signature" в ваш манифест.

Для получения дополнительной информации вы можете проверить Permission-Element

Подобно:

  

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

 # | @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 

Затем, чтобы понять, какой android:protectionLevel="signature" означает, вам нужно будет прочитать страницу о элементе разрешения . Что суммируется в таблице:

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

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

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

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

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

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

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

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

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

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

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

  • Как контролировать объем мультимедиа?
  • Вызов собственного метода дважды из сторонней библиотеки в Activity приводит к закрытию приложения Android
  • Не удалось слияние манифеста: uses-sdk: minSdkVersion 8 не может быть меньше
  • Подключение 2 экземпляров эмулятора в Android
  • список вложенных списков в Android
  • Что означает параметр LayoutInflater attachToRoot?
  • Что такое «Контекст» на Android?
  • Google Cloud Messaging - сообщения, которые иногда не принимаются, пока не изменилось состояние сети
  • Использование файлов cookie с Android-библиотекой volley
  • возможно ли создать диалоговое окно listview внутри?
  • Как сделать масштабируемый LinearLayout?
  • Давайте будем гением компьютера.