Android闹钟的一些注意事项
关于Android系统的闹钟,接触过的各位肯定都是一把辛酸泪,这玩意坑的一逼,各种隐藏的问题,用起来需要格外注意。但是在一些业务中(比如后台定时心跳等),闹钟往往又是最好的方案,因此不得不去搞清楚闹钟的一些注意事项。鉴于笔者被闹钟坑的不轻,特此作文以记之。
Android系统的闹钟服务AlarmManager有两种用法,第一种是每隔一段时间响应一次,第二种是在固定的时间响应。其实这两种方式本质都是一样的,因为你把第一种的间隔时间设置成24h的话,他就是第二种闹钟了。下面看代码:
//设置闹钟private void setAlarmEveryday(int hour, int minute, int second, int milliSecond, String action) {AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);Calendar calendar = Calendar.getInstance(TimeZone.getTimeZone("GMT+08"));calendar.setTimeInMillis(System.currentTimeMillis());calendar.set(Calendar.HOUR_OF_DAY, hour);calendar.set(Calendar.MINUTE, minute);calendar.set(Calendar.SECOND, second);calendar.set(Calendar.MILLISECOND, milliSecond);Intent intent = new Intent();intent.setAction(action);//intent.putExtra("test_alarm", "test 20s");PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT);alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, pendingIntent);}
这个闹钟就是在每天指定的时间点去响应一次。这里对这个指定的时间有一个要注意的地方,即:如果闹钟设置的时间比设备当前时间晚,那么设备的闹钟是正常的,它会等到设置的时间再响应;如果设置的时间比当前时间早,那么他会在设置完成后立刻响应(我有句mmp!)。响应的代码如下:
package com.xxx.receiver;import android.app.Application;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;/**** Created by jxl on 2017/8/24.*/public class StepReceiver extends BroadcastReceiver {private static final String TAG = "Step_Receiver";@Overridepublic void onReceive(Context context, Intent intent) {String action = intent.getAction();Log.i(TAG, "action = " + action);//业务实现,注意此处的context生命周期很短}
}
注册一个广播接收器,针对上面设置的action进行监听。一旦闹钟响应,就会触发广播接收器,此时可以执行相关的操作。
为什么要设置action呢?其实是为了防止一个坑,就是如果前后两次设置相同时间的闹钟,后面一个会覆盖前一个闹钟,而这两个闹钟往往是实现不一样的功能。为了防止这种情况,我们需要保证两个闹钟的PendingIntent 值不相同。怎样保证不相同呢?网络上有很多种说法,在此不去赘述,只说一下,设置不同的action即可。
如果是需要某段时间之后响应,那更简单:
Intent intent =new Intent(this, AlarmReceiver.class); PendingIntent sender= PendingIntent.getBroadcast(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); //这个是设置一次性的闹钟//am.set(AlarmManager.RTC_WAKEUP,c.getTimeInMillis(),pendingIntent);
好了,关于闹钟就是这些,希望对刚接触闹钟的你有所帮助。
Android闹钟的一些注意事项相关推荐
- android闹钟延时,android闹钟定时启动延时或者直接不启动
自己写的android闹钟功能,需要实现timepicker选择完成后将选择的时间设定为闹钟的启动时间,但是不管怎么改总是没法定时启动 alertDialog = new AlertDialog.Bu ...
- Android闹钟设置的解决方案
Android闹钟设置的解决方案 参考文章: (1)Android闹钟设置的解决方案 (2)https://www.cnblogs.com/common1140/p/5701716.html 备忘一下 ...
- 简单实现 Android 闹钟
Android 闹钟 比如:一次闹钟响过之后开关变为关的状态:直接点击开关不能实现开关闹钟的作用,需要在点击item的菜单中进行更改:未知原因闹钟不准时,不能及时响应,求大神讲解 话不多说,看代码 M ...
- Android闹钟最终版【android源码闹钟解析】
我以前写了个复杂闹钟的demo,参见Android闹钟[复杂版][大明进化十五] .但是里面的bug有一些,好多人留言,所以我就看看源码,找找原因?顺便把源码代码整理出来,弄成一个完整的可以运行的ap ...
- android 闹钟不响,为什么我写的Android闹钟到时间时却不会响
我在写Android闹钟时用如下代码: Intent i=new Intent(AddInform.this,CallAlarm.class); PendingIntent sender=Pendin ...
- android闹钟 推迟功能,Android闹钟事件被延迟
我开发了我的 android闹钟应用程序,每小时需要一些东西(如下午1点,下午2点,下午3点,下午4点,下午5点,下午6点等). 现在我正在使用alarmManager,这样我每小时都会收到一次bro ...
- android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表
android闹钟倒计时 Your Android device's built-in Clock app can serve as an alarm clock, a kitchen timer, ...
- android闹钟测评,谁才是轻便实用好闹钟Android闹钟类应用横评
谁才是轻便实用好闹钟Android闹钟类应用横评 作者: CBINews编辑责任编辑:申耀 2012-03-09 18:45:19 来源:电脑商情在线关键字:点心OS 手机现在已经让很多人的手表藏进了 ...
- android 设备关机后还能在设定的闹钟时刻响起的功能如何实现,Android闹钟 AlarmManager的使用...
Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...
最新文章
- PreferenceActivity是什么?
- SQL2K数据库开发六之表操作创建产品表products
- 【Linux】手把手教你在 Linux 环境下部署 Oracle 数据库!
- 面试 排序 java_面试 12:玩转 Java 快速排序
- elasticsearch使用more_like_this实现基于内容的推荐
- 配置编译win7+VS2017+opencv4.0.1+contrib4.0.1
- 关于秒杀系统优化方向
- 高效、稳定开发功能的一些心得
- pythonstdin_如何在Python中执行将数据写入stdin的进程?
- 改善代码设计 —— 处理概括关系(Dealing with Generalization)
- 计算机软件编程英语词汇集锦
- 20200723每日一句
- CISCO 2811 路由器配置命令全集
- html怎么统计总访问量,如何实现对网站页面访问量的统计?
- 火影150集碎片拾忆 记于2014-04-08
- 【导数术】4.三次函数
- 五笔打字怎么学,负基础
- 数学建模与计算机专业的关系,数学建模与计算机的重要性.doc
- 华为机试二星题--机器人走迷宫
- React Native微信分享