Как стать автором
Обновить

Android 6.0: Doze Mode, App Standby, Runtime Permissions. Всё, что необходимо знать каждому разработчику

Время на прочтение 5 мин
Количество просмотров 64K
Всего голосов 27: ↑26 и ↓1 +25
Комментарии 17

Комментарии 17

А что будет со старыми приложениям, у которых опасные permissions прописаны в манифесте?
Если у них targetSdk 22 или ниже, то все будет хорошо, пермишены они получат автоматом.
Но пользователь может зайти в настройки, и запретить приложению доступ к любому из сервисов, например, к камере. Его система предупредит:«Не надо так, приложение не оптимизировано, может упасть!».
Но он все равно может запретитить. В этом случае SecurityException не вывалится, а будут следующие сценарии, для локейшн и камеры, к примеру, будут возвращены null, для контактов — пустой список или пустой контакт.
Тогда какой стимул будет для «плохих» приложений обновлять sdk на > 22?
Как бы более низкая выдача в поиске.
Как бы это не самое страшное для «плохих» приложений
фишки нового api не задействовать, саппорты новые не запустить, плей сервисы — много всего
А что с саппортами не так? И разве android будет принудительно «портить» фичи при старом targetSdk?
Нет смысла оставаться на старом SDK. Всё равно ОС не даст разрешения или пользователь их отрубит, а отреагировать на старом SDK не получится корректно.
Имхо шансы на отключение пермишшенов в настройках во много раз ниже, чем на запрет прямо при запросе приложения.
А еще важное замечание: нормальные разрешения пользователь не может отозвать, если они уже были даны при установке приложения
Ну это логично, ведь они в манифесте. И если приложение запустилось, предполагается, что разрешения все уже даны и ничего проверять не нужно.
Опять же, отозвать можно — через удаление приложения.
Doze Mode может серьёзно поломать моё приложение, предвижу жалобы от пользователей. Моя софтина коннектится к цифровой камере и управляет ею по проводу или Wi-Fi. Вот как, например, снимать time lapse, который может длиться много часов, если через час девайс заснёт, невзирая на мой wake lock?
При старте просить добавить свое приложение в Whitelist (… Приложениям из Whitelist не страшны ни Doze Mode ни App Standby).
Спасибо!
А если у нас приложение будильник, то мы должны обязательно вызвать для Alarm setAndAllowWhileIdle() или setExactAndAllowWhileIdle().
Хоть автор и заблуждается насчёт будильника, эти методы действительно разбудят телефон (AlarmManager API23+).

А для будильника нужно продолжать использовать setAlarmClock().
Описать только PROTECTION_NORMAL запросы в manifest


Небольшое уточнение, в manifest нужно описывать все permissions, а не только из normal категории. Отличие в том, что для normal, разрешения система выдаст автоматически, а для остальных нужно будет воспользоваться новой схемой запроса разрешений в коде. Очевидно, что в manifest запросы пригодятся системе и для обратной совместимости.
Зарегистрируйтесь на Хабре , чтобы оставить комментарий

Публикации

Истории