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

时间:2013-01-23 22:49:40

标签: java android broadcastreceiver alarmmanager reboot

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

但是,如果我每天有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();

            }        

1 个答案:

答案 0 :(得分:1)

  

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

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

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

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

  

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

这取决于你。

  

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

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