在设备启动时重新设置警报

时间:2016-02-29 17:51:36

标签: android broadcastreceiver alarmmanager

我有一个提醒应用,可以在指定的时间和日期向用户显示TODO。由于应用程序设置的所有警报在设备关闭时都会丢失,因此我将警报重置逻辑设置为Broadcast Receiver,如下所示。

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);
        }
    }
}

的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>

问题是BOOT_COMPLETED的信号在BroadcastReceiver通常的2-3分钟时间内收到很晚。如果用户在重新启动电话的时间和接收信号的时间之间设置了警报,该怎么办?然后该警报将丢失给用户。我知道发生这种情况的概率很低但不是零。所以我试图通过在其中设置警报来查找股票Clock应用程序是否会发生这种情况。但它完全没有受到影响,一旦设备重新启动,警报就会响起。那么,一旦设备启动没有任何延迟,我有什么方法可以收到BOOT_COMPELTED信号吗?

谢谢!

0 个答案:

没有答案