AlarmManager实现定时功能

2023-10-27

实现定时间隔功能

1.发送

 AlarmManager alarmService = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        Intent alarmIntent = new Intent(context, ScreenControlAlarmReceiver.class).setAction("intent_alarm_log");
        PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);//通过广播接收
        alarmService.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + INTERVAL, broadcast);//INTERVAL毫秒后触发

set有三个参数:

第一个参数表示闹钟类型:AlarmManager.RTC_WAKEUP表示使用当前系统的绝对时间,那么第二个参数触发时间也是精确的绝对时间。其他在文章最后介绍。

第二个参数表示为触发时间:可以是当前时间添加你的延迟时间System.currentTimeMillis() + INTERVAL,表示INTERVAL毫秒时间后进行触发。

第三个参数表示为触发时间:可以是当前时间添加你的延迟时间System.currentTimeMillis() + INTERVAL,表示INTERVAL毫秒时间后进行触发。

2.注册ScreenControlAlarmReceiver接收触发:

public class ScreenControlAlarmReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
       //你的逻辑处理
        //如果需要实现间隔定时器功能,在重新执行1的发送步骤,实现间隔定时,间隔时间为INTERVAL
    }

//xml注册
 <receiver android:name=".ScreenControlAlarmReceiver">
        <intent-filter>
            <action android:name="intent_alarm_log"/>
        </intent-filter>

3.取消闹钟
只需要取消同一个PendingIntent 即可。

 AlarmManager alarmService = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        Intent alarmIntent = new Intent(context, ScreenControlAlarmReceiver.class).setAction("intent_alarm_log");
        PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);
        alarmService.cancel(broadcast);

在精确时间定时触发

有时候需要定时精确时刻,比如今天下午定时16:51:00触发执行操作:

        Calendar instance = Calendar.getInstance();
        instance.set(Calendar.HOUR_OF_DAY, 16);//小时
        instance.set(Calendar.MINUTE, 51);//分钟
        instance.set(Calendar.SECOND, 0);//秒

        AlarmManager alarmService = (AlarmManager) context.getSystemService(ALARM_SERVICE);
        Intent alarmIntent = new Intent(context, ScreenControlAlarmReceiver.class).setAction("intent_alarm_log");
        PendingIntent broadcast = PendingIntent.getBroadcast(context, 0, alarmIntent, 0);//通过广播接收
        alarmService.set(AlarmManager.RTC_WAKEUP, instance.getTimeInMillis() , broadcast);

其他参数介绍

第一个参数:

public class AlarmManager {
     //在系统精确时间触发,会唤醒cpu
    public static final int RTC_WAKEUP = 0;

     //在系统精确时间触发,设备休眠不唤醒不触发
    public static final int RTC = 1;

     //系统从启动到现在的A毫秒时间(包括深度睡眠的时间)后触发,A应该就是第二个参数
    public static final int ELAPSED_REALTIME_WAKEUP = 2;

     //统从启动到现在的A毫秒时间(包括深度睡眠的时间)后触发,A应该就是第二个参数
     //系统休眠时不会唤醒cpu,也就不会触发
    public static final int ELAPSED_REALTIME = 3;

第二个参数:
如果第一个参数指定是在精确时间触发,那个第二个参数也需要指定的是精确时间。如果如果第一个参数指定是启动到现在的相对时间,那个第二个参数应该是这个相对时间

出现的坑记录:
1.sdk19及以后,会出现时间不准问题,可以使用setExact方法。
2.同一个action,提交注册后会覆盖上一个注册。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

AlarmManager实现定时功能 的相关文章

随机推荐

  • leetcode第84场双周赛

    leetcode第84场双周赛 一 6141 合并相似的物品 1 题目描述 2 思路分析 3 代码实现 二 6142 统计坏数对的数目 1 题目描述 2 思路分析 3 代码实现 三 6174 任务调度器 II 1 题目描述 2 思路分析 3
  • docker-compose部署springboot应用

    docker compose部署springboot应用 最开始使用tomcat部署java应用 如果要部署多个系统 我通常部署多个tomcat 每个tomcat一个系统 可以添加到系统服务自动启动 后来随着springboot流行 改为将
  • SQLNET.RECV_TIMEOUT & SQLNET.SEND_TIMEOUT

    SQLNET RECV TIMEOUT 客户端设置的作用是 其发起的请求 必须在设置值内有返回 否则报错中断该参数不是限制执行时间 而是限制返回包的时间如果执行一个SQL抽取数据 由于每秒都有数据返回 所以不会报错如果执行一个存过 由于请求
  • 为什么ChatGPT这么强?—— 一文读懂ChatGPT原理!

    前言 最近一周多的时间 只要不是生活在火星 喜欢技术的同学一定都被OpenAI的ChatGPT给刷屏了 ChatGPT与以往的公开提供服务的对话机器人相比 性能有了显著的提高 它可以相对可靠地提供一些日常对话 知识获取的功能 也可以它根据人
  • python-数据分析(9-Pandas)

    Pandas 9 Pandas 9 1 介绍与安装 Pandas介绍与安装 为什么会有Pandas Pandas支持大部分Numpy语言风格 尤其是数组函数与广播机制的各种数据处理 但是Numpy更适合处理同质型的数据 而Pandas的设计
  • SSRF web351-360(除357)

    SSRF web351 web360 写在前面 ssrf常见的一些函数 curl init 初始curl会话 curl setopt 会话设置 curl close 会话关闭 file get contents 将整个文件或一个url所指向
  • (JS设计模式)二.部分面试题

    1 打车时 可以打专车或者快车 任何车都有车牌号和名称 不同车价格不同 快车每公里1元 专车每公里2元 行程开始时 显示车辆信息 行程结束时 显示打车金额 假定行程就5公里 题目 画出UML类图 用ES6语法写出该示例 答 UML类图 2
  • Linux命令·touch

    linux的touch命令不常用 一般在使用make的时候可能会用到 用来修改文件时间戳 或者新建一个不存在的文件 1 命令格式 touch 选项 文件 2 命令参数 a 或 time atime或 time access或 time us
  • Office2021版64位+mathtype6.9

    终于安装成功了 如果你也遇到以下问题 试试看我的方法行不行 终于成功了很激动 在这里插入代码片 按照网上的教程 分别在以下两个文件夹 注意不一样的根目录 放了这三个文件 然后 打开office是这样的 接着 按照网上说的 不成功就把这三个文
  • uniApp 开发支付宝小程序引入订阅消息组件

    1 manifest json 配置 2 page json 配置 3 页面引入组件
  • EXTJS--分页PagingToolbar插件的重新刷新、重新加载方法

    var pagebar new Ext PagingToolbar store store pageSize Ext page pageSize displayInfo true displayMsg 共有 2 条记录 当前显示 0 1 条
  • 详解区块链分层构架

    区块链 是一个结合了数学 密码学 计算机学等大量学科和技术而形成的去中心化网络系统 如何实现这些技术的融合 则来自于区块链在构建时所形成的六大主要的分层结构 他们分别是网络层 数据层 共识层 激励层 合约层 以及应用层 此外 还有支持数据流
  • 快速入门 YOLOv5(ultralytics)

    YOLOv5 是一系列在 COCO 数据集上预训练的对象检测架构和模型 代表Ultralytics 对未来视觉 AI 方法的开源研究 结合了在数千小时的研究和开发中获得的经验教训和最佳实践 文档 有关训练 测试和部署的完整文档 请参阅YOL
  • windows应急响应工具

    Webshell查杀 d盾 http www d99net net WEBDIR WebShell 扫描服务 OpenRASP 团队 https scanner baidu com pages intro 河马 https www shel
  • Telegram 查看下载保存的文件

    文章目录 Android 缓存文件 本地文件 Windows 缓存文件 本地文件 清理缓存 Android Windows Android 缓存文件 单纯的点下载或者图片 GIF 等的预览只会缓存到 Internal Storage sdc
  • [问题已处理]-mac安装cobra失败

    导语 今天在mac环境中没法成功安装cobra 记录一下避免以后踩坑 执行go get报错 更换安装方式 安装cobra cli go get u github com spf13 cobra latest go install githu
  • 最全最实用的 安装ESXi6及Linux虚拟机的创建教程

    ESXi的作为虚拟化环境的虚拟机管理程序层 负责将服务器虚拟成资源池 提供接口供管理组件调用 将下面的ISO刻录成光盘或可启动 盘 安装在服务器裸机上 安装过程 开机做好阵列 选择从安装介质启动 按F11继续 输入密码 rootroot 密
  • [QT编程系列-8]:C++图形用户界面编程,QT框架快速入门培训 - 3- QT窗体设计 - 自定义对话框

    目录 3 QT窗体设计 3 6 自定义对话框 3 6 1 种类 3 6 2 输入对话框 编辑 3 6 3 字体对话框 3 6 4 文件对话框 编辑 3 6 5 颜色对话框 3 6 6 输出对话框 编辑 3 6 7 进度条对话框 编辑 3 6
  • linux下编译内核时出现 scripts/basic/fixdep.c:206 等错误解决办法

    现象如下 下面是网上抄的 我本人是英文的 不方便看 就当下面是翻译的吧 大致信息如下 scripts basic fixdep c 300 警告 未使用的变量 s scripts basic fixdep c 在函数 print deps
  • AlarmManager实现定时功能

    实现定时间隔功能 1 发送 AlarmManager alarmService AlarmManager context getSystemService ALARM SERVICE Intent alarmIntent new Inten