一种选择是将所有设置的警报存储在数据库中,然后创建一个将侦听 ACTION_TIME_CHANGE 操作的 BroadcastReceiver。当用户更改时间时,它将被触发。然后创建一个负责重置警报的 IntentService。在这个服务类中:
读取 db 并识别所有通过的警报。取消通过的警报设置第二天的警报您的代码可能如下所示: 在您的清单中:
<uses-permission android:name="android.permission.ACTION_TIME_CHANGE"/>
及以下活动:
<receiver android:name=".TimeChangedReceiver" android:enabled="true">
<intent-filter>
<action android:name="android.intent.action.TIME_SET" />
</intent-filter>
在其中创建类“TimeChangedReceiver”:
public class TimeChangedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if("android.intent.action.TIME_SET".equals(intent.getAction())) {
Intent i = new Intent(context, RestartAlarmsService.class);
ComponentName service = context.startService(i);
}
}
}
在其中创建“RestartAlarmsService”类:
public class RestartAlarmsService extends IntentService {
public RestartAlarmsService() {
super("RestartAlarmsService");
}
@Override
protected void onHandleIntent(Intent intent) {
// read db here
// then cancel passed alarms
// reset them to next day
}
}
您可以找到许多关于如何使用数据库并在代码中实现它的教程。希望我的回答能有所帮助。