android - 如何在 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 中唤醒设备。
解决方案
推荐阅读
- postgresql - 如何将 PSQl 查询转换为聚合 2 个表的 KnexJS
- javascript - 反应
设置默认值 - aws-lambda - 如何在 terraform 中创建 aws lambda 触发器?
- json - 导出 CLOB Json 文件
- python - 得到“ValueError:磁带仍在录制,如果您在计算梯度磁带内的雅可比时尝试重新输入已经激活的磁带,可能会发生这种情况”
- javascript - Cypress - 仅运行测试套件中的特定测试用例
- python-3.x - 对具有重复值的数据框进行排序
- r - 有没有办法将文本/值附加到 R 中的特定行?
- amazon-web-services - AWS s3 存储桶显示少 1 个文件
- jquery - 使用 Jquery 在每次滚动移动(100vh)时执行的滚动移动效果