欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android中AlarmManager基本用法分析

程序员文章站 2024-03-07 14:01:03
本文实例讲述了android中alarmmanager基本用法。分享给大家供大家参考,具体如下: 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程序设计有所帮助。