Как разбудить устройство в BroadcastReceiver?

101
16 июня 2021, 22:10

Условие: Есть приложение которое, в определённый момент, должно пробуждать устройство (экран устройства должен включится) и показывать уведомление. Работа осуществляется через BroadcastReceiver.

override fun onReceive(context: Context, intent: Intent)
{
    //Будим девай
    wakeDevice(context)
    //Вызываем функцию показа уведомления
    makeBarNotification(context)
}

Всё, что касается пробуждения устройства выведено в отдельную функцию. Код ниже:

private fun wakeDevice(context: Context)
{
    //Создаём Power manager
    val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
    //Создаём WakeLock
    val myWakeLock = powerManager.newWakeLock(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, "MyApp:NotificationWakelockTag")
    //Указываем длительность работы (В данном случае 5 секунд)
    myWakeLock.acquire(5 * 1000L)
    //Запускаем WakeLock
    myWakeLock.release()
}

В manifest'e прописал строчку: <uses-permission android:name="android.permission.WAKE_LOCK" />

Проблема: Устройство не пробуждается и вылетает ошибка: "java.lang.IllegalArgumentException: Must specify a valid wake lock level." указывающая на строчку, где я создаю WakeLock (val myWakeLock = ...)

Предположение: Вероятно проблема в WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON. Этот код рекомендуют использовать взамен PowerManager.SCREEN_BRIGHT_WAKE_LOCK вот тут: источник

Вопрос: Как тогда разбудить устройство в ВroadcastReceiver'e если код PowerManager.SCREEN_BRIGHT_WAKE_LOCK - "deprecated", а код WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON приводит к ошибке.

Answer 1

Вы должны использовать один из вариантов при вызове newWakeLock

  1. PARTIAL_WAKE_LOCK

  2. FULL_WAKE_LOCK

  3. SCREEN_DIM_WAKE_LOCK

  4. SCREEN_BRIGHT_WAKE_LOCK

Ресурс: https://stackoverflow.com/questions/15555630/specify-valid-wake-lock-level

READ ALSO
Как узнать общий объем ОЗУ в системе?

Как узнать общий объем ОЗУ в системе?

Смотрел в javadocТам написано, что в java 1

97
Удаление переноса строки из текста

Удаление переноса строки из текста

Есть файл с текстом типа " А1, Б2, В3,

120
получить SHA-1 APK файла по имени пакета

получить SHA-1 APK файла по имени пакета

Здравствуйте столкнулся с проблемой: нужно получить SHA-1 APK-файла заданного приложения, я могу получить пакет, версию, имя, но вообще не могу...

75
как получить данные с .equals\contains()

как получить данные с .equals\contains()

у меня есть 2 текста которые сравниваются, и если один не сравнивается с другим, нужно вывести тот КУСОК ТЕКСТА, который не сравниваетсяНапример...

97