Состояние: Есть приложение, которое должно разбудить устройство (должен включиться экран устройства) и одновременно показывать уведомление.Я сделал это через BroadcastReceiver.
override fun onReceive(context: Context, intent: Intent)
{
//Wake up the deivce
wakeDevice(context)
//Call notification display function
makeBarNotification(context)
}
Все, что касается пробуждения устройства, я написал в отдельной функции.Код ниже:
private fun wakeDevice(context: Context)
{
//Create Power manager
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
//Create WakeLock
val myWakeLock = powerManager.newWakeLock(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, "MyApp:NotificationWakelockTag")
//Specify the duration of work (In this case, 5 seconds)
myWakeLock.acquire(5 * 1000L)
//ReleaseWakeLock
myWakeLock.release()
}
Я написал в манифесте этот код: <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
здесь: source
Вопрос: Как затем разбудить устройство в BroadcastReceiver, если код PowerManager.SCREEN_BRIGHT_WAKE_LOCK
устарела, а код WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON
приводит к ошибке.