最终效果图:

当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在Logcat中做了个简单的打印。本例子重点在于讲解在android中AlarmManager的使用。

activity的代码:

view plain copy to clipboard print ?
  1. packagecn.com.chenzheng_java;
  2. importjava.util.Calendar;
  3. importandroid.app.Activity;
  4. importandroid.app.AlarmManager;
  5. importandroid.app.PendingIntent;
  6. importandroid.app.TimePickerDialog;
  7. importandroid.app.TimePickerDialog.OnTimeSetListener;
  8. importandroid.content.Intent;
  9. importandroid.os.Bundle;
  10. importandroid.util.Log;
  11. importandroid.view.View;
  12. importandroid.view.View.OnClickListener;
  13. importandroid.widget.Button;
  14. importandroid.widget.CheckBox;
  15. importandroid.widget.CompoundButton;
  16. importandroid.widget.TimePicker;
  17. importandroid.widget.CompoundButton.OnCheckedChangeListener;
  18. publicclassAlarmManagerActivityextendsActivityimplementsOnClickListener,OnTimeSetListener,OnCheckedChangeListener{
  19. Calendarcalendar=Calendar.getInstance();//代表当前时间的日历
  20. Buttonbutton1;
  21. CheckBoxcheckBox;
  22. booleanflag=false;//是否只执行一次
  23. @Override
  24. protectedvoidonCreate(BundlesavedInstanceState){
  25. super.onCreate(savedInstanceState);
  26. setContentView(R.layout.alarm);
  27. button1=(Button)findViewById(R.id.button_alarm1);
  28. checkBox=(CheckBox)findViewById(R.id.checkBox1_alarm);
  29. checkBox.setOnCheckedChangeListener(this);
  30. button1.setOnClickListener(this);
  31. }
  32. @Override
  33. publicvoidonClick(Viewv){
  34. if(v==button1){
  35. calendar.setTimeInMillis(System.currentTimeMillis());
  36. newTimePickerDialog(AlarmManagerActivity.this,this,
  37. calendar.get(Calendar.HOUR_OF_DAY),
  38. calendar.get(Calendar.MINUTE),true).show();
  39. }
  40. }
  41. /**
  42. *当我们设置了新时间时触发。
  43. */
  44. @Override
  45. publicvoidonTimeSet(TimePickerview,inthourOfDay,intminute){
  46. //将时间设置为定时的时间
  47. calendar.set(Calendar.HOUR_OF_DAY,hourOfDay);
  48. calendar.set(Calendar.MINUTE,minute);
  49. Intentintent=newIntent(AlarmManagerActivity.this,MyAlarmBroadCast.class);
  50. PendingIntentpendingIntent=PendingIntent.getBroadcast(getApplicationContext(),0,intent,0);
  51. /***
  52. *获取全局定时器的服务管理器
  53. */
  54. AlarmManageralarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
  55. if(flag){
  56. /**
  57. *指定的任务只会执行一次,如果该pendingIntent指定的任务已经被执行过了,那么该方法直接会被cancel掉。
  58. *set(inttype,longtriggerAtTime,PendingIntentoperation)
  59. *type指定定时模式。
  60. *triggerAtTime触发任务的时间。该参数和定时模式息息相关
  61. *operation该参数指定一个广播Intent,当时间到了时,系统会广播里面的intent,触发相应的广播接收者执行某些操作,比如响铃……
  62. */
  63. alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
  64. }
  65. else
  66. {
  67. /**
  68. *通过该方法指定的任务会一直间隔执行,第三个参数就指定了执行的时间间隔
  69. *如果我们想取消的话,请使用:alarmManager.cancel(pendingIntent);
  70. *注意,这里的pendingIntent要和setRepeating方法中的一致哦。
  71. */
  72. alarmManager.setRepeating(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),5*1000,pendingIntent);
  73. }
  74. Log.i("通知","定时成功!");
  75. }
  76. @Override
  77. publicvoidonCheckedChanged(CompoundButtonbuttonView,booleanisChecked){
  78. flag=!isChecked;
  79. }
  80. }

alarm.xml

view plain copy to clipboard print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"android:layout_height="match_parent"
  4. android:orientation="vertical">
  5. <AnalogClockandroid:id="@+id/analogClock1_alarm"
  6. android:layout_width="wrap_content"android:layout_height="wrap_content"></AnalogClock>
  7. <CheckBoxandroid:text="是否重复响铃"android:id="@+id/checkBox1_alarm"android:layout_width="wrap_content"android:layout_height="wrap_content"></CheckBox>
  8. <Buttonandroid:text="定时"android:id="@+id/button_alarm1"
  9. android:layout_width="wrap_content"android:layout_height="wrap_content"></Button>
  10. </LinearLayout>

MyAlarmBroadCast.java

view plain copy to clipboard print ?
  1. packagecn.com.chenzheng_java;
  2. importandroid.content.BroadcastReceiver;
  3. importandroid.content.Context;
  4. importandroid.content.Intent;
  5. importandroid.util.Log;
  6. importandroid.widget.Toast;
  7. /**
  8. *声明接受AlarmManager时间到了时发布的广播
  9. *@authorchenzheng_java
  10. */
  11. publicclassMyAlarmBroadCastextendsBroadcastReceiver{
  12. @Override
  13. publicvoidonReceive(Contextcontext,Intentintent){
  14. Log.i("通知","收到了广播");
  15. //可以在此处添加响铃的代码
  16. }
  17. }

Manifest.xml代码:

view plain copy to clipboard print ?
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <manifestxmlns:android="http://schemas.android.com/apk/res/android"
  3. package="cn.com.chenzheng_java"
  4. android:versionCode="1"
  5. android:versionName="1.0">
  6. <uses-sdkandroid:minSdkVersion="8"/>
  7. <applicationandroid:icon="@drawable/icon"android:label="@string/app_name">
  8. <activityandroid:name="AlarmManagerActivity"
  9. android:label="@string/app_name">
  10. <intent-filter>
  11. <actionandroid:name="android.intent.action.MAIN"/>
  12. <categoryandroid:name="android.intent.category.LAUNCHER"/>
  13. </intent-filter>
  14. </activity>
  15. <receiverandroid:name="MyAlarmBroadCast"/>
  16. </application>
  17. </manifest>

------------------------------------------------------------------

AlarmManager的使用机制有的称呼为全局定时器,有的称呼为闹钟。通过对它的使用,个人觉得叫全局定时器比较合适,其实它的作用和Timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作

使用的步骤:

第一:获取管理器。AlarmManager alarmManager = this.getSystemService(ALARM_SERVICE);

第二:通过AlarmManager的set和setRepeating方法定时。可以通过cancel()方法取消定时。

在set和setRepeating方法中,第一个参数type代表定时模式,这里的定时模式主要有以下几种。

原贴地址:http://blog.csdn.net/chenzheng_java/archive/2011/03/20/6263096.aspx

更多相关文章

  1. [Android]《Android艺术开发探索》第一章读书笔记
  2. Android解惑 - 为什么要用Fragment.setArguments(Bundle bundle)
  3. Android(安卓)- Acitivty生命周期 理解
  4. Android(安卓)-- onWindowFocusChanged
  5. Android(安卓)framework层JNI的使用浅析
  6. 【Android】Could not find XXX.apk!的解决方法
  7. 可以在Android上发定时短信
  8. Android(安卓)TabActivity中的子Tab Activity 无法正常 bindServ
  9. Android(安卓)4.4 webview 架构

随机推荐

  1. Android应用程序资源管理器(Asset Manager
  2. Android和IOS获取crash信息
  3. Android受手机制造商青睐 是福是祸
  4. Android事件分发机制 详解攻略,您值得拥有
  5. Android APP设计加载使用gif动图需要注意
  6. Android中textView自动识别电话号码,电子
  7. 《Android/OPhone 开发完全讲义》样章和
  8. 菜鸟初学者学习Android心得
  9. 从零开始--系统深入学习android(理论-开发
  10. Android[中级教程] 深入剖析Android消息