首页 > 解决方案 > 应用程序没有收到 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

标签: androidkotlinbroadcastreceiveralarmmanager

解决方案


推荐阅读