果图:

当我们点击定时时,会弹出一个时间选择器,选定好时间之后,系统便可以进行定时了。注意,这里可不是会真的响铃,我们在定时的任务里并没有添加响铃的代码,只是在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代表定时模式,这里的定时模式主要有以下几种。

更多相关文章

  1. Android之TelephonyManager类的方法详解
  2. OkHttp在Android中使用详解
  3. Android(安卓)Handler消息机制
  4. android 按两次返回键强制退出整个APP
  5. Android(安卓)ListView一些应该知道的事
  6. android利用post方式与web服务器通信
  7. Android存储路径解析
  8. 深入了解android平台的jni(一)
  9. Android(安卓)线程 thread 两种实现方法!

随机推荐

  1. 如何在你的本上或者pc上运行 Android [翻
  2. Android(安卓)Resource Framework
  3. Android(安卓)Content Provider Basics
  4. Android基本功:Handler消息传送机制
  5. mac下配置android环境变量
  6. 如何查看android数据文件?
  7. Android(安卓)动画资源
  8. Button Android
  9. android简易网页播放器
  10. 使用 Intel HAXM 为 Android 模拟器加速,