0
点赞
收藏
分享

微信扫一扫

android之定时器AlarmManager .


 果图:

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

      activity的代码:

 


​​view plain​​​ ​​​copy to clipboard​​​ ​​​print​​​ ​​​?​​



  1. package

  2. import

  3. import
  4. import
  5. import
  6. import
  7. import
  8. import
  9. import
  10. import
  11. import
  12. import
  13. import
  14. import
  15. import
  16. import
  17. import

  18. public class AlarmManagerActivity extends Activity implements
  19. // 代表当前时间的日历
  20. Button button1 ;
  21. CheckBox checkBox;
  22. boolean flag = false ;// 是否只执行一次

  23. @Override
  24. protected void
  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. this);

  30. this);
  31. }

  32. @Override
  33. public void
  34. if(v==button1){
  35. calendar.setTimeInMillis(System.currentTimeMillis());
  36. new TimePickerDialog(AlarmManagerActivity.this, this,
  37. calendar.get(Calendar.HOUR_OF_DAY),
  38. true).show();
  39. }
  40. }

  41. /**
  42. * 当我们设置了新时间时触发。
  43. */
  44. @Override
  45. public void onTimeSet(TimePicker view, int hourOfDay, int

  46. // 将时间设置为定时的时间
  47. calendar.set(Calendar.HOUR_OF_DAY, hourOfDay);
  48. calendar.set(Calendar.MINUTE, minute);

  49. new Intent(AlarmManagerActivity.this,MyAlarmBroadCast.class);
  50. 0, intent, 0);

  51. /***
  52. * 获取全局定时器的服务管理器
  53. */
  54. AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

  55. if(flag){


  56. /**
  57. * 指定的任务只会执行一次,如果该pendingIntent指定的任务已经被执行过了,那么该方法直接会被cancel掉。
  58. *  set(int type, long triggerAtTime, PendingIntent operation)
  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. 5*1000, pendingIntent);
  73. }
  74. "通知", "定时成功!");

  75. }



  76. @Override
  77. public void onCheckedChanged(CompoundButton buttonView, boolean
  78. flag = !isChecked;
  79. }




  80. }


 

alarm.xml

 


​​view plain​​​ ​​​copy to clipboard​​​ ​​​print​​​ ​​​?​​



  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent" android:layout_height="match_parent"
  4. android:orientation="vertical">
  5. <AnalogClock android:id="@+id/analogClock1_alarm"
  6. android:layout_width="wrap_content" android:layout_height="wrap_content"></AnalogClock>
  7. <CheckBox android:text="是否重复响铃" android:id="@+id/checkBox1_alarm" android:layout_width="wrap_content" android:layout_height="wrap_content"></CheckBox>
  8. <Button android: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. package

  2. import
  3. import
  4. import
  5. import
  6. import

  7. /**
  8. * 声明接受AlarmManager时间到了时发布的广播
  9. * @author chenzheng_java
  10. */
  11. public class MyAlarmBroadCast extends

  12. @Override
  13. public void
  14. "通知", "收到了广播");
  15. // 可以在此处添加响铃的代码
  16. }

  17. }


 

Manifest.xml代码:

 


​​view plain​​​ ​​​copy to clipboard​​​ ​​​print​​​ ​​​?​​



  1. <?xml version="1.0" encoding="utf-8"?>
  2. <manifest xmlns: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-sdk android:minSdkVersion="8" />

  7. <application android:icon="@drawable/icon" android:label="@string/app_name">
  8. <activity android:name="AlarmManagerActivity"
  9. android:label="@string/app_name">
  10. <intent-filter>
  11. <action android:name="android.intent.action.MAIN" />
  12. <category android:name="android.intent.category.LAUNCHER" />
  13. </intent-filter>
  14. </activity>
  15. <receiver android:name="MyAlarmBroadCast"/>
  16. </application>
  17. </manifest>


 

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

 

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

使用的步骤:

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

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

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

 

 

 

举报

相关推荐

0 条评论