关于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闹钟的一些注意事项相关推荐

  1. android闹钟延时,android闹钟定时启动延时或者直接不启动

    自己写的android闹钟功能,需要实现timepicker选择完成后将选择的时间设定为闹钟的启动时间,但是不管怎么改总是没法定时启动 alertDialog = new AlertDialog.Bu ...

  2. Android闹钟设置的解决方案

    Android闹钟设置的解决方案 参考文章: (1)Android闹钟设置的解决方案 (2)https://www.cnblogs.com/common1140/p/5701716.html 备忘一下 ...

  3. 简单实现 Android 闹钟

    Android 闹钟 比如:一次闹钟响过之后开关变为关的状态:直接点击开关不能实现开关闹钟的作用,需要在点击item的菜单中进行更改:未知原因闹钟不准时,不能及时响应,求大神讲解 话不多说,看代码 M ...

  4. Android闹钟最终版【android源码闹钟解析】

    我以前写了个复杂闹钟的demo,参见Android闹钟[复杂版][大明进化十五] .但是里面的bug有一些,好多人留言,所以我就看看源码,找找原因?顺便把源码代码整理出来,弄成一个完整的可以运行的ap ...

  5. android 闹钟不响,为什么我写的Android闹钟到时间时却不会响

    我在写Android闹钟时用如下代码: Intent i=new Intent(AddInform.this,CallAlarm.class); PendingIntent sender=Pendin ...

  6. android闹钟 推迟功能,Android闹钟事件被延迟

    我开发了我的 android闹钟应用程序,每小时需要一些东西(如下午1点,下午2点,下午3点,下午4点,下午5点,下午6点等). 现在我正在使用alarmManager,这样我每小时都会收到一次bro ...

  7. android闹钟倒计时_如何在Android上使用闹钟,计时器和秒表

    android闹钟倒计时 Your Android device's built-in Clock app can serve as an alarm clock, a kitchen timer, ...

  8. android闹钟测评,谁才是轻便实用好闹钟Android闹钟类应用横评

    谁才是轻便实用好闹钟Android闹钟类应用横评 作者: CBINews编辑责任编辑:申耀 2012-03-09 18:45:19 来源:电脑商情在线关键字:点心OS 手机现在已经让很多人的手表藏进了 ...

  9. android 设备关机后还能在设定的闹钟时刻响起的功能如何实现,Android闹钟 AlarmManager的使用...

    Android闹钟 AlarmManager的使用 AlarmManager介绍 AlarmManager这个类提供对系统闹钟服务的访问接口. 你可以为你的应用设定一个在未来某个时间唤醒的功能. 当闹 ...

最新文章

  1. PreferenceActivity是什么?
  2. SQL2K数据库开发六之表操作创建产品表products
  3. 【Linux】手把手教你在 Linux 环境下部署 Oracle 数据库!
  4. 面试 排序 java_面试 12:玩转 Java 快速排序
  5. elasticsearch使用more_like_this实现基于内容的推荐
  6. 配置编译win7+VS2017+opencv4.0.1+contrib4.0.1
  7. 关于秒杀系统优化方向
  8. 高效、稳定开发功能的一些心得
  9. pythonstdin_如何在Python中执行将数据写入stdin的进程?
  10. 改善代码设计 —— 处理概括关系(Dealing with Generalization)
  11. 计算机软件编程英语词汇集锦
  12. 20200723每日一句
  13. CISCO 2811 路由器配置命令全集
  14. html怎么统计总访问量,如何实现对网站页面访问量的统计?
  15. 火影150集碎片拾忆 记于2014-04-08
  16. 【导数术】4.三次函数
  17. 五笔打字怎么学,负基础
  18. 数学建模与计算机专业的关系,数学建模与计算机的重要性.doc
  19. 华为机试二星题--机器人走迷宫
  20. React Native微信分享

热门文章

  1. 你知道吗,自信是你成功的第一秘诀
  2. ISO27001认证
  3. mac的截图及sips使用心得
  4. CentOS 7添加硬盘扩展根目录空间
  5. 计算机病毒课程设计论文,计算机病毒毕业设计论文.doc
  6. 小孩多大适合学编程机器人
  7. Oracle DBA认证考试
  8. 集成GoogleMap,实现定位和获取位置信息
  9. 制作Knoppix USB启动盘
  10. 摸鱼摸累了的年轻人,正在信奉“躺平学”