Создание простого будильника для Android 10. Возможно ли?
При создании простого будильника для Android 10 столкнулся с проблемой запрета вызова активности из "фона".
Использую AlarmManager. Если в PendingIntent "запаковать" активность, то ее система проигнорирует, но можно вызвать ForegroundService. Хорошо, но и сервис не может вызвать активность а только вывести уведомление, что для будильника не солидно. Также невозможно включить экран, ведь пользователь может искать устройство ранним утром когда в комнате темно. Остается только играть мелодию.
На форуме подсказывают, что можно запросить разрешение SYSTEM_ALERT_WINDOW, но на моем устройстве этот запрос игнорируется и его даже нет в списке, чтобы установить вручную.
Родной будильник устройства работает прекрасно вызывая активность на экран, пробуждая устройство и включая экран.
Вопрос простой. Я что-то упускаю или такова реальность на сегодняшний день?
Ответы (1 шт):
Существует один легальный способ вывести активность из фона - это запросить разрешение SYSTEM_ALERT_WINDOW, но согласно официальной документации это невозможно сделать для Android 10 (Go edition). что и подтверждается практикой. Судя по всему эта редакция установлена на подавляющее большинство устройств в том числе и на моем. К сожалению я не могу выяснить как обстоят дела с Android 11 из-за отсутствия устройства.
К счастью включить экран из сервиса возможно вот так.
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
...
PowerManager.WakeLock wake;
...
PowerManager powerManager = ((PowerManager) getSystemService(Context.POWER_SERVICE));
wake = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "AC7:");
if( wake != null ){
wake.acquire();
}
...
if( wake != null ){
wake.release();
}
...
Поэтому пришлось ограничиться уведомлением и читая "лестные отзывы" от пользователей. Можно еще убрать "Key Guard", но я не стал этого делать так как пустой экран дезориентирует пользователя.