多个警报在引导后重新启动

我正在设置多个警报,以便在特定日期重复这些警报。 现在我听说Android不会在重启时保存警报。 我还读到当BOOT_COMPLETED重新安排所有警报时应该使用BroadcastReceiver

但是,如果我每天有5个警报=在不同日期安排了大约35个警报,如何告诉BroadcastReceiver在重新启动后重新安排警报。 我需要将它们存储在数据库中吗? 我如何存储它们? 或者我需要BOOT_COMPLETED吗? 这种事有什么例子吗? 我找不到它。

这是我目前用于设置警报和简单接收器类的内容。 我在这里使用的是Service而不是BroadcastReceiver,因为我听说BR应该只用于处理短的事情,将来我将不得不使用一些长的声音片段。

  private void setAlarm(){ Intent intent = new Intent(getBaseContext(), AlarmReceiver.class); PendingIntent pendingintent = PendingIntent.getService(getBaseContext(), 2, intent, PendingIntent.FLAG_CANCEL_CURRENT); AlarmManager am = (AlarmManager) getSystemService(ALARM_SERVICE); am.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + sveskupa, pendingintent); Toast.makeText(getBaseContext(), "Alarm is set", Toast.LENGTH_LONG).show(); } 

AlarmReceiver类:

 public class AlarmReceiver extends Service{ @Override public IBinder onBind(Intent intent) { // TODO Auto-generated method stub return null; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); final MediaPlayer MPRadio1 = MediaPlayer.create(this, R.raw.radio3); MPRadio1.start(); Toast.makeText(getBaseContext(), "OnCreate", Toast.LENGTH_LONG).show(); } 

但是,如果我每天有5个警报=在不同日期安排了大约35个警报,如何告诉BroadcastReceiver在重新启动后重新安排警报。

警报计划是固定的,不变的,并且烘焙到您的代码中,或者不是。

如果它被烘焙到您的代码中,只需使用启动时BroadcastReceiver中的相同代码重新建立警报计划。

否则,警报时间表来自某个地方 ,因为由于宇宙射线与电话的CPU和存储器的相互作用,不可能自发地创建警报时间表。 您需要确保在重新启动后可以访问相同的信息。

我需要将它们存储在数据库中吗? 我如何存储它们?

那取决于你。

我在这里使用的是Service而不是BroadcastReceiver,因为我听说BR应该只用于处理短的事情,将来我将不得不使用一些长的声音片段。

不要直接从_WAKEUP风格的警报中使用Service ,因为无法保证您的Service能够获得控制权。 要么不使用_WAKEUP style警报,要么让警报触发BroadcastReceiver ,它可以与WakeLock一起使用以确保您的Service获得控制权并可以完成其工作。