Intereting Posts
Android: насколько безопасна база данных, упакованная с приложением Android – намерение Facebook посетить определенную страницу Facebook? Ошибка AppCompatDialogFragment с помощью appcompat-v7: 23.1.0 Как проверить, действительно ли используется Android-разрешение? Ошибка ОС Android с некоторыми устройствами, на которых работает Jelly Bean / 4.2.1 – TextView.setError (ошибка CharSequence) Отсутствует значок Как получить номер телефона устройства программно Android – добавить файлы в пакет APK? Градиент развертки: что это такое и его примеры Не удалось создать уведомление: недопустимый конструктор Является ли Retrofit + Okhttp с помощью httpCaching по умолчанию в Android? Драйвер USB Nexus 5 Что такое использование List <NameValuePair> или ArrayList <NameValuePair> Программно подключаться к сопряженному динамику Bluetooth и воспроизводить аудио Реверсное воспроизведение Android и кадр за кадром Откройте Activity A и загрузите определенный фрагмент Activity A FROM Activity B

Какие разрешения не остаются при обновлении до целевогоSdk 23 или Android 6?

Задний план

Я помню, что было сказано (на одном из видеороликов Google), что если предыдущая версия приложения была обновлена ​​до версии targetSdk 23 в новой версии, все разрешения, предоставленные ранее, останутся в силе.

Например, если вы установили приложение с targetSdk 22, которое требовало разрешения на чтение из контактов, то даже после обновления приложения до одного с targetSdk 23 он будет оставаться таким же.

Причина проста: пользователь уже предоставил разрешения при установке.

Проблема

Согласно тому, что я нашел, есть исключение из этого правила:

Если у вашего приложения было разрешение SYSTEM_ALERT_WINDOW, и теперь вы обновляетесь до targetSdk 23, он отменяется (сбрасывается), и вам нужно запросить его у пользователя.

Это поведение нигде не упоминается в документах:

  • http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW
  • http://developer.android.com/guide/topics/security/permissions.html
  • http://developer.android.com/about/versions/marshmallow/android-6.0-changes.html
  • http://developer.android.com/about/versions/marshmallow/android-6.0.html

А также не в каком-либо видео, которое я смотрел.

Единственное, что упоминается в разрешении SYSTEM_ALERT_WINDOW, заключается в том, что вам нужно обрабатывать их по-разному, используя ACTION_MANAGE_OVERLAY_PERMISSION, чтобы запросить разрешение, и Settings.canDrawOverlays (…), чтобы проверить, предоставлено ли разрешение

Что я пробовал

Я попытался связаться с Google по этой проблеме, и они сказали, что это намеренно:

Я говорил с командой разработчиков, и поведение, которое вы видите, работает по назначению. Это описано здесь: http://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW

Уровень защиты SYSTEM_ALERT_WINDOW был поднят в Android M.

Вопросы

  1. Существуют ли другие разрешения, которые имеют такое поведение?

  2. Что произойдет, если приложение имеет targetSdk 22/23, и было обновление ОС на Android 6? Будет ли отозвано SYSTEM_ALERT_WINDOW (или любое другое разрешение)?

  3. Довольно уверен, что другие вещи останутся предоставленными, но я бы хотел спросить: как насчет других специальных разрешений, таких как: SAF, admin, использование-доступ, доступ к доступу, доступ к уведомлениям, …?


EDIT: около # 2, вот ответ от Google (ссылка здесь ):

При обновлении ОС приложение должно сохранять SYSTEM_ALERT_WINDOW. У приложений Pre-API 23 есть разрешение по умолчанию, в отличие от приложений API 23, которые по умолчанию отключены. Тем не менее, есть известная ошибка, что для приложений API 23 они теряли SYSTEM_ALERT_WINDOW при обновлении. Рекомендация разработчика заключается в том, чтобы всегда проверять статус SYSTEM_ALERT_WINDOW при запуске, а если не предоставлять, направьте пользователя в Настройки. Мы будем исправлять эту проблему в будущей версии.

Solutions Collecting From Web of "Какие разрешения не остаются при обновлении до целевогоSdk 23 или Android 6?"