android之定时器AlarmManager用法详解

本文介绍如何在Android应用中使用AlarmManager实现定时任务。包括创建时间选择对话框、设置一次性任务及重复性任务,并演示如何通过广播接收器响应这些任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最终效果图:

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

activity的代码:

  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. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值