android - 应用程序没有收到 RECEIVE_BOOT_COMPLETED 广播
问题描述
我已经尝试了所有可能的答案,但没有任何帮助。
我想在设备重新启动时使用 AlarmManager 重置警报,并且代码完全可以做到这一点,但是当我将它放入接收器时它不会。
我曾尝试创建一项服务,但这似乎根本不起作用,这可能是我的无能,但我就是不明白为什么这段代码不起作用。
安卓清单:
<manifest
(...)
<uses-permission android:name = "android.permission.RECEIVE_BOOT_COMPLETED" />
(...)
<application
(...)
<receiver
android:name = ".utils.DeviceRebootReceiver">
<intent-filter>
<action android:name = "android.intent.action.BOOT_COMPLETED" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
设备重启接收器:
class DeviceRebootReceiver : BroadcastReceiver() {
override fun onReceive(context : Context?, intent : Intent?) {
resetAlarms(context)
}
}
有趣的重置警报(上下文:上下文):
fun resetAlarms(context : Context?) {
suspend fun resetAlarmsCoroutine(context : Context) {
val reminders = NotesDatabase.getInstance(context).notesDatabaseDAO.getAllActiveReminders()
reminders.forEach {
if (it.reminderTime > System.currentTimeMillis()) {
createAlarm(it.reminderTime, it.reminderMessage,null,context)
}
}
}
CoroutineScope(Dispatchers.IO).launch {
if (context != null) {
resetAlarmsCoroutine(context)
}
}
}
无需显示 createAlarm() 函数,因为它工作正常,但是因为我已经看到 AlarmManager 可能会导致重启时出现问题,所以我确实在那里实例化它,如下所示:
val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
解决方案
推荐阅读
- python - 按特定 ID 过滤所有帖子
- angular - rxjs 订阅函数 - 等待事件
- unit-testing - TDD:在实现另一种(公共)方法之前无法测试一种方法的行为,反之亦然
- discord - Discord.js 反应问题
- sql - Postgres中的递归父子关系
- mysql - mysql替换路径
- javascript - 如何向 Laravel 发送数据和文件?
- c# - 在意外的时间调用了一个方法。一次只能注册一个 PrintTaskRequested 事件的处理程序
- php - 如何从第三方应用程序中创建的 webhook 接收数据?
- r - 指定列时,像 fread 和 vroom 这样的 csv 阅读器是否会读取所有列?