Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在设备启动时重新设置警报_Android_Broadcastreceiver_Alarmmanager - Fatal编程技术网

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并检查是否错过警报更复杂吗?如果错过,则立即触发警报?是的,类似的方法可以工作,但需要一些努力。谢谢