Android中AlarmManager基本用法分析
本文实例讲述了android中alarmmanager基本用法。分享给大家供大家参考,具体如下:
alarmmanager的作用文档中的解释是:在特定的时刻为我们广播一个指定的intent。简单的说就是我们设定一个时间,然后在该时间到来时,alarmmanager为我们广播一个我们设定的intent。
对应alarmmanager更深层的了解可以参考:
android提供了四种类型的闹钟:
① elapsed_realtime
在指定的延时过后,发送广播,但不唤醒设备。
② elapsed_realtime_wakeup
在指定的演示后,发送广播,并唤醒设备
延时是要把系统启动的时间systemclock.elapsedrealtime()算进去的,具体用法看代码。
③ rtc
在指定的时刻,发送广播,但不唤醒设备
④ rtc_wakeup
在指定的时刻,发送广播,并唤醒设备
alarmmanager提供的方法:
1. void set(int type, long triggerattime, pendingintent operation)
设置一个闹钟
2. void setrepeating(int type, long triggerattime, long interval, pendingintent operation)
设置一个会重复的闹钟
3. void setinexactrepeating(int type, long triggerattime, long interval, pendingintent operation)
设置一个重复闹钟的不精确版本,它相对而言更节能(power-efficient)一些,因为系统可能会将几个差不多的闹钟合并为一个来执行,减少设备的唤醒次数。
内置的几个interval为:
interval_fifteen_minutes
interval_half_hour
interval_hour
interval_half_day
interval_day
如果你将其设为day,那么可能这一天中的所有闹钟都会被合并掉。
void cancel(pendingintent operation)
取消一个设置的闹钟
void settimezone(string timezone)
设置系统的默认时区。需要android.permission.set_time_zone权限
// 首先创建receiver public class alarmreceiver extends broadcastreceiver { @override public void onreceive(context context, intent intent) { toast.maketext(context, "alarm", toast.length_short).show(); } }
// manifest中申明,并不需要intent-filter,我们是明确指定发到哪个receiver的 <receiver android:name="yuan.receivers.alarmreceiver" />
pendingintent:简单的说就是在intent上在加个指定的动作。intent的话,我们还需要在执行startactivity、startservice或sendbroadcast才能使intent有用。而pendingintent的话就是将这个动作包含在内了,如pendingintent.getbroadcast就包含了sendbroadcast的动作。
5s后发送指定广播
alarmmanager alarmmgr = (alarmmanager) getsystemservice(context.alarm_service); intent intent = new intent(getapplicationcontext(), alarmreceiver.class); int requestcode = 0; pendingintent pendintent = pendingintent.getbroadcast(getapplicationcontext(), requestcode, intent, pendingintent.flag_update_current); // 5秒后发送广播,只发送一次 int triggerattime = systemclock.elapsedrealtime() + 5 * 1000; alarmmgr.set(alarmmanager.elapsed_realtime, triggerattime, pendintent);
5s后发送指定广播,然后每个10秒重复发送广播
alarmmanager alarmmgr = (alarmmanager) getsystemservice(context.alarm_service); intent intent = new intent(getapplicationcontext(), alarmreceiver.class); int requestcode = 0; pendingintent pendintent = pendingintent.getbroadcast(getapplicationcontext(), requestcode, intent, pendingintent.flag_update_current); // 5秒后发送广播,然后每个10秒重复发广播。广播都是直接发到alarmreceiver的 int triggerattime = systemclock.elapsedrealtime() + 5 * 1000; int interval = 10 * 1000; alarmmgr.setrepeating(alarmmanager.elapsed_realtime_wakeup, triggerattime, interval, pendintent);
取消一个闹钟
alarmmanager alarmmgr = (alarmmanager) getsystemservice(context.alarm_service); intent intent = new intent(getapplicationcontext(), alarmreceiver.class); pendingintent pendintent = pendingintent.getbroadcast(getapplicationcontext(), 0, intent, pendingintent.flag_update_current); // 与上面的intent匹配(filterequals(intent))的闹钟会被取消 alarmmgr.cancel(pendintent);
更多关于android相关内容感兴趣的读者可查看本站专题:《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android多媒体操作技巧汇总(音频,视频,录音等)》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
推荐阅读
-
Android中AlarmManager基本用法分析
-
Android中WebView的一些简单用法
-
Android桌面插件App Widget用法分析
-
Android开发中Socket通信的基本实现方法讲解
-
Android开发中ImageView的scaletype属性用法分析
-
Android开发中LayoutInflater用法详解
-
Android 通知的基本用法示例代码
-
Android UI控件ExpandableListView基本用法详解
-
Android系统进程间通信(IPC)机制Binder中的Server启动过程源代码分析
-
Android系统进程间通信(IPC)机制Binder中的Client获得Server远程接口过程源代码分析