我有一个提醒应用,可以在指定的时间和日期向用户显示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
信号吗?
谢谢!