Android 在设备启动时重新设置警报
我有一个提醒应用程序,可以在指定的时间和日期向用户显示待办事项。当设备关闭时,应用程序设置的所有报警都会丢失,因此我将报警重新设置逻辑放入Android 在设备启动时重新设置警报,android,broadcastreceiver,alarmmanager,Android,Broadcastreceiver,Alarmmanager,我有一个提醒应用程序,可以在指定的时间和日期向用户显示待办事项。当设备关闭时,应用程序设置的所有报警都会丢失,因此我将报警重新设置逻辑放入广播接收器中,如下所示 public class BootReceiver extends BroadcastReceiver { public BootReceiver() { } @Override public void onReceive(Context context, Intent intent) {
广播接收器中,如下所示
public class BootReceiver extends BroadcastReceiver {
public BootReceiver() {
}
@Override
public void onReceive(Context context, Intent intent) {
List<Todo> todos = fetchTodosFromDatabase();
PendingIntent pendingIntent = PendingIntent.getActivity(......);
AlarmManager alarmManager = (AlarmManager) context.getSystemServices(Context.ALARM_SERVICE);
for (Todo todo : todos) {
long timeInMillis = todo.getTime();
alarmManager.setExact(AlarmManager.RTC_WAKEUP, timeInMillis, pendingIntent);
}
}
}
公共类BootReceiver扩展了BroadcastReceiver{
公共引导接收器(){
}
@凌驾
公共void onReceive(上下文、意图){
List todos=fetchTodosFromDatabase();
PendingEvent PendingEvent=PendingEvent.getActivity(……);
AlarmManager AlarmManager=(AlarmManager)context.getSystemServices(context.ALARM\u服务);
for(待办事项:待办事项){
long-timeInMillis=todo.getTime();
alarmManager.setExact(alarmManager.RTC_唤醒,时间单位为毫秒,等待时间);
}
}
}
AndroidManifest.xml
<manifest package="............"
xmlns:android="http://schemas.android.com/apk/res/android"
android:installLocation="internalOnly">
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<receiver
android:name=".BootReceiver"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
</intent-filter>
</receiver>
</manifest>
问题在于,BroadcastReceiver
通常在2-3分钟的时间内,很晚才收到BOOT\u COMPLETED
的信号。如果用户在手机重新启动和接收信号之间设置了报警,该怎么办。然后,用户将丢失此警报。我知道发生这种情况的概率很低,但不是零。因此,我试图通过在股票Clock
应用程序中设置闹钟来找出这种情况是否会发生。但它完全没有受到影响,一旦设备重新启动,警报就会响起。那么,有没有什么方法可以让我在设备启动后立即收到BOOT\u compelled
信号而不延迟
谢谢 这比重复每个todo并检查是否错过警报更复杂吗?如果错过,则立即触发警报?是的,类似的方法可以工作,但需要一些努力。谢谢