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

Android基于AlarmManager实现用户在线心跳功能示例

程序员文章站 2023-12-10 13:11:22
本文实例讲述了android基于alarmmanager实现用户在线心跳功能。分享给大家供大家参考,具体如下: 在做即时通信或者其他检测是否在线等操作时要用到心跳。比较常...

本文实例讲述了android基于alarmmanager实现用户在线心跳功能。分享给大家供大家参考,具体如下:

在做即时通信或者其他检测是否在线等操作时要用到心跳。比较常用的是alarmmanager全局定时器 去实现。

alarmmanager的使用机制有的称呼为全局定时器,有的称呼为闹钟。其实它的作用和timer有点相似。都有两种相似的用法:(1)在指定时长后执行某项操作(2)周期性的执行某项操作

alarmmanager对象配合intent使用,可以定时的开启一个activity,发送一个broadcast,或者开启一个service.

下面的代码详细的介绍了两种定时方式的使用:

(1)在指定时长后执行某项操作

//操作:发送一个广播,广播接收后toast提示定时操作完成   intent intent =new intent(main.this, alarmreceiver.class);
intent.setaction("short");
pendingintent sender= pendingintent.getbroadcast(main.this, 0, intent, 0);
//设定一个五秒后的时间
calendar calendar=calendar.getinstance();
calendar.settimeinmillis(system.currenttimemillis());
calendar.add(calendar.second, 5);
alarmmanager alarm=(alarmmanager)getsystemservice(alarm_service);
alarm.set(alarmmanager.rtc_wakeup, calendar.gettimeinmillis(), sender);
//或者以下面方式简化
//alarm.set(alarmmanager.rtc_wakeup, system.currenttimemillis()+5*1000, sender);
toast.maketext(main.this, "五秒后alarm开启", toast.length_long).show();

注意:receiver记得在manifest.xml注册

public static class alarmreceiver extends broadcastreceiver{
    @override
    public void onreceive(context context, intent intent) {
      // todo auto-generated method stub
      if(intent.getaction().equals("short")){
        toast.maketext(context, "short alarm", toast.length_long).show();
      }else{
        toast.maketext(context, "repeating alarm",            toast.length_long).show();
      }
    }
}

(2)周期性的执行某项操作

intent intent =new intent(main.this, alarmreceiver.class);
intent.setaction("repeating");
pendingintent sender=pendingintent
.getbroadcast(main.this, 0, intent, 0);
//开始时间
long firstime=systemclock.elapsedrealtime();
alarmmanager am=(alarmmanager)getsystemservice(alarm_service);  //5秒一个周期,不停的发送广播
am.setrepeating(alarmmanager.elapsed_realtime_wakeup, firstime, 5*1000, sender);

alarmmanager的setrepeating()相当于timer的schedule(task,delay,peroid);有点差异的地方是timer这个方法是指定延迟多长时间以后开始周期性的执行task;

alarmmanager的取消:(其中需要注意的是取消的intent必须与启动intent保持绝对一致才能支持取消alarmmanager)

intent intent =new intent(main.this, alarmreceiver.class);
intent.setaction("repeating");
pendingintent sender=pendingintent.getbroadcast(main.this, 0, intent, 0);
alarmmanager alarm=(alarmmanager)getsystemservice(alarm_service);
alarm.cancel(sender);

更多关于android相关内容感兴趣的读者可查看本站专题:《android视图view技巧总结》、《android编程之activity操作技巧总结》、《android布局layout技巧总结》、《android开发入门与进阶教程》、《android资源操作技巧汇总》及《android控件用法总结

希望本文所述对大家android程序设计有所帮助。