首页 > 解决方案 > 如何在 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

问题:PowerManager.SCREEN_BRIGHT_WAKE_LOCK如果代码已被弃用并且代码WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON导致错误,那么如何在 BroadcastReceiver 中唤醒设备。

标签: androidkotlinbroadcastreceiver

解决方案


推荐阅读