Какие разрешения не остаются при обновлении до targetSdk 23 или Android 6?
Фон
Я помню, что было сказано (в одном из видео от Google), что если предыдущая версия приложения была обновлена, чтобы в новой версии был targetSdk 23, ВСЕ разрешения, которые были предоставлены ранее, останутся предоставленными сейчас.
Так, например, если вы установили приложение с targetSdk 22, для которого требовалось разрешение на чтение из контактов, то даже после обновления приложения до цели с targetSdk 23 оно останется таким же.
Причина проста: пользователь уже предоставил разрешения при установке.
Эта проблема
Согласно тому, что я нашел, есть исключение из этого правила:
Если ваше приложение имело разрешение SYSTEM_ALERT_WINDOW, и теперь вы обновляете его до targetSdk 23, оно отменяется (сбрасывается), и вам необходимо запросить его у пользователя.
Это поведение не упоминается нигде в документации:
- http://developer.android.com/reference/android/Manifest.permission.html
- 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 был повышен в Android M.
Вопросы
Есть ли другие разрешения, которые имеют такое поведение?
Что произойдет, если в приложении будет targetSdk 22/23 и произойдет обновление ОС до Android 6? Будет ли отзываться SYSTEM_ALERT_WINDOW (или любое другое разрешение)?
Я уверен, что другие вещи останутся предоставленными, но я хотел бы спросить в любом случае: как насчет других специальных функций, подобных полномочиям, таких как: SAF, администратор, доступ к использованию, доступ к доступности, доступ к уведомлениям, ...?
РЕДАКТИРОВАТЬ: о #2, вот ответ от Google (ссылка здесь):
При обновлении ОС приложение должно сохранять SYSTEM_ALERT_WINDOW. Приложения до API 23 имеют разрешение по умолчанию, в отличие от приложений API 23, которые по умолчанию отключены. Однако существует известная ошибка, что для приложений API 23 они теряли SYSTEM_ALERT_WINDOW при обновлении. Для разработчика рекомендуется всегда проверять состояние SYSTEM_ALERT_WINDOW при запуске и, если не предоставлено, направлять пользователя в Настройки. Мы исправим проблему в следующем выпуске.