全局定时器 实现闹钟功能

http://book.51cto.com/art/201006/207068.htm

8.3.5 全局定时器AlarmManager(3)

本例使用BroadcastReceiver来处理定时提醒任务。BroadcastReceiver类的代码如下:

 
  1. packagenet.blogjava.mobile;
  2. importjava.util.Calendar;
  3. importandroid.app.Activity;
  4. importandroid.content.BroadcastReceiver;
  5. importandroid.content.Context;
  6. importandroid.content.Intent;
  7. importandroid.content.SharedPreferences;
  8. importandroid.media.MediaPlayer;
  9. publicclassAlarmReceiverextendsBroadcastReceiver
  10. {
  11. @Override
  12. publicvoidonReceive(Contextcontext,Intentintent)
  13. {
  14. SharedPreferencessharedPreferences=
    context.getSharedPreferences(
  15. "alarm_record",Activity.MODE_PRIVATE);
  16. Stringhour=String.valueOf(Calendar.
    getInstance().get(Calendar.HOUR_OF_DAY));
  17. Stringminute=String.valueOf(Calendar.
    getInstance().get(Calendar.MINUTE));
  18. //从XML文件中获得描述当前时间点的value
  19. Stringtime=sharedPreferences.
    getString(hour+":"+minute,null);
  20. if(time!=null)
  21. {
  22. //播放声音
  23. MediaPlayermediaPlayer=
    MediaPlayer.create(context,R.raw.ring);
  24. mediaPlayer.start();
  25. }
  26. }
  27. }

配置AlarmReceiver类的代码如下:

 
  1. <receiverandroid:name=".AlarmReceiver"android:enabled="true"/>

在主程序中每添加一个时间点,就会在XML文件中保存所添加的时间点,代码如下:

 
  1. packagenet.blogjava.mobile;
  2. importandroid.app.Activity;
  3. importandroid.app.AlarmManager;
  4. importandroid.app.AlertDialog;
  5. importandroid.app.PendingIntent;
  6. importandroid.content.Context;
  7. importandroid.content.DialogInterface;
  8. importandroid.content.Intent;
  9. importandroid.content.SharedPreferences;
  10. importandroid.os.Bundle;
  11. importandroid.view.View;
  12. importandroid.view.View.OnClickListener;
  13. importandroid.widget.Button;
  14. importandroid.widget.TextView;
  15. importandroid.widget.TimePicker;
  16. publicclassMainextendsActivityimplementsOnClickListener
  17. {
  18. privateTextViewtvAlarmRecord;
  19. privateSharedPreferencessharedPreferences;
  20. @Override
  21. publicvoidonClick(Viewv)
  22. {
  23. Viewview=getLayoutInflater().inflate(R.layout.alarm,null);
  24. finalTimePickertimePicker=(TimePicker)
    view.findViewById(R.id.timepicker);
  25. timePicker.setIs24HourView(true);
  26. //显示设置时间点的对话框
  27. newAlertDialog.Builder(this).setTitle("设置提醒时间").setView(view)
  28. .setPositiveButton("确定",new
    DialogInterface.OnClickListener()
  29. {
  30. @Override
  31. publicvoidonClick(DialogInterfacedialog,intwhich)
  32. {
  33. StringtimeStr=String.valueOf(timePicker
  34. .getCurrentHour())+":"
  35. +String.valueOf
    (timePicker.getCurrentMinute());
  36. //将时间点添加到TextView组件中
  37. tvAlarmRecord.setText
    (tvAlarmRecord.getText().toString()+"\n"+timeStr);
  38. //保存时间点
  39. sharedPreferences.edit().
    putString(timeStr,timeStr).commit();
  40. }
  41. }).setNegativeButton("取消",null).show();
  42. }
  43. @Override
  44. publicvoidonCreate(BundlesavedInstanceState)
  45. {
  46. super.onCreate(savedInstanceState);
  47. setContentView(R.layout.main);
  48. ButtonbtnAddAlarm=(Button)findViewById(R.id.btnAddAlarm);
  49. tvAlarmRecord=(TextView)findViewById(R.id.tvAlarmRecord);
  50. btnAddAlarm.setOnClickListener(this);
  51. sharedPreferences=getSharedPreferences("alarm_record",
  52. Activity.MODE_PRIVATE);
  53. AlarmManageralarmManager=(AlarmManager)
    getSystemService(Context.ALARM_SERVICE);
  54. Intentintent=newIntent(this,AlarmReceiver.class);
  55. //创建封装BroadcastReceiver的pendingIntent对象
  56. PendingIntentpendingIntent=PendingIntent.
    getBroadcast(this,0,intent,0);
  57. //开始定时器,每1分钟执行一次
  58. alarmManager.setRepeating(AlarmManager.RTC,
    0,60*1000,pendingIntent);
  59. }
  60. }

在使用本例添加若干个时间点后,会在alarm_record.xml文件中看到类似下面的内容:

 
  1. <?xmlversion='1.0'encoding='utf-8'standalone='yes'?>
  2. <map>
  3. <stringname="18:52">18:52</string>
  4. <stringname="20:16">20:16</string>
  5. <stringname="19:11">19:11</string>
  6. <stringname="19:58">19:58</string>
  7. <stringname="22:51">22:51</string>
  8. <stringname="22:10">22:10</string>
  9. <stringname="22:11">22:11</string>
  10. <stringname="20:10">20:10</string>
  11. </map>

上面每个<string>元素都是一个时间点,定时器将每隔1分钟查一次alarm_record.xml文件。

你可能感兴趣的:(定时器)