我正在设置多个闹钟,以便在特定日期重复这些闹钟。现在我听说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();
}
答案 0 :(得分:1)
但是,如果我每天有5个警报=在不同日期安排了大约35个警报,如何告诉BroadcastReceiver重启后重新安排警报。
警报计划是固定的,不变的,并且已经烘焙到您的代码中,或者不是。
如果它已编入您的代码中,只需使用启动时BroadcastReceiver
中的相同代码重新建立警报计划。
否则,警报时间表来自某处,因为由于宇宙射线与电话的CPU和内存的相互作用,警报时间表不太可能自发地创建。您需要确保在重新启动后可以访问相同的信息。
我是否需要将它们存储在数据库中?我该如何存储它们?
这取决于你。
我在这里使用的是Service而不是BroadcastReceiver,因为我听说BR应该只用于处理短小的事情,将来我将不得不使用一些长的声音片段。
不直接从Service
式闹钟使用_WAKEUP
,因为无法保证您的Service
能够获得控制权。要么不使用_WAKEUP
式警报,要么让警报触发BroadcastReceiver
,这可以与WakeLock
一起使用,以确保您的Service
获得控制权并且可以完成它的工作。