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程序设计有所帮助。
推荐阅读