实现多次定时提醒的原理是: 在添加时间点后, 需要将所添加的时间点保存在文件或数据库中。 在这里使用SharedPreferences 来保存时间点,key和value都是时间点.然后使用AlarmManager 每隔1分钟扫描一次,在扫描过程中从文件获得当前时间(时:分)的value,如果成功获得value,则说明当前时间为时间点,需要播放声音文件,否则继续扫描.
本例使用BroadcastReceiver 来处理定时提醒任务, BroadcastReceiver 类的代码如下:
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
SharedPreferences sharedPreferences = context.getSharedPreferences("alarm_record", Activity.MODE_PRIVATE);
String hour = String.valueOf(Calendar.getInstance().get(Calendar.HOUR_OF_DAY));
String minute = String.valueOf(Calendar.getInstance().get(Calendar.MINUTE));
// 从XML 文件夹获得描述当前时间点的value
String time = sharedPreferences.getString(hour + ":" + minute, null);
if (time != null) {
//播放声音
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.ring);
mediaPlayer.start();
}} }
在Main.java 类中关键代码:
sharedPreferences = getSharedPreferences("alarm_record",Activity.MODE_PRIVATE);
AlarmManager am = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this,AlarmReceiver.class);
//创建封装 BroadcastReceiver 的 pendingIntent 对象
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,0,intent,0);
// 开始定时器, 每 1分钟执行一次
am.setRepeating(AlarmManager.RTC,0,60000,pendingIntent);
在AndroidManifest.xml配置如下: <receiver android:name=".AlarmReceiver" android:enabled="true" />
示意图
具体代码见 ch08_multialarm工程