AlarmManager闹钟管理者
AlarmManager是Android提供的一个全局定时器,利用系统闹钟定时发送广播。这样做的好处是:如果App提前注册闹钟的广播接收器,即使App退出了,只要定时到达,App就会被唤醒响应广播事件。
AlarmManager设置的PendingIntent待定意图,只要未cancel,就会按时启动,无论程序是否关闭。
请注意,静态注册的广播接收者在即使程序关闭也依然生效;动态注册的广播接收者在程序关闭后自动注销,动态注册的广播接收者也可使用unregisterReceiver()手动注销。在Android8.0以后,只有小部分接收系统广播的广播接收者允许静态注册;其他广播接收者只能动态注册,否则收不到广播。
一、使用方法
(1) 创建用于广播的Intent(意图)
Intent intent=new Intent();
intent.setAction( "MyTestBroadcast" );
(2) 创建发送广播的PendingIntent(待定意图)
PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);
第一个参数为环境;第二个参数为请求码;第三个参数为要执行的Intent(意图);第四个参数为请求时PendingIntent已存在的解决方案。
(3) 创建执行PendingIntent的时间
//创建Calendar
Calendar calendar=Calendar.getInstance();
//将时间设置为当前时间
calendar.setTimeInMillis(System.currentTimeMillis());
//增加时间
calendar.add(Calendar.SECOND,7);
//获取最终时间
long time=calendar.getTimeInMillis();
(4) 创建AlarmManager并设置PendingIntent
//创建AlarmManager闹钟管理者
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);
alarmManager.set()方法的参数:第一个参数为闹钟类型,第二个参数为long型的执行PendingIntent的时间,第三个参数为到达时间后执行的PendingIntent。
二、闹钟类型
(1) ELAPSED_REALTIME : 以手机开机时间为基准。
(2) ELAPSED_REALTIME_WAKEUP : 以手机开机时间为基准,并且可以在休眠时发出广播。
(3) RTC : 以UTC标准时间为基准。
(4) RTC_WAKEUP 【常用】:以 UTC标准时间为基准,并且可以在休眠时发出广播。
三、使用AlarmManager
//创建Intent意图,用于发送广播
Intent intent=new Intent().setAction("MyTestBroadcast");
//根据Intent意图创建PendingIntent等待意图
PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);//获取执行时间
//创建Calendar
Calendar calendar=Calendar.getInstance();
//将时间设置为当前时间
calendar.setTimeInMillis(System.currentTimeMillis());
//增加时间
calendar.add(Calendar.SECOND,7);
//获取最终时间
long time=calendar.getTimeInMillis();//创建AlarmManager闹钟管理者
AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);
//设置闹钟
alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);
四、例子
1.创建广播接收者
AndroidManifest.xml清单文件
<application......><receiverandroid:name=".MyBroadcastReceiver"android:enabled="true"android:exported="true"></receiver><activity......>......</activity>
</application>
MyBroadcastReceiver.java文件
public class MyBroadcastReceiver extends BroadcastReceiver{private Context context;public MyBroadcastReceiver(Context context){this.context=context;}public void onReceive(Context context, Intent intent) {//广播接收者NotificationManager notificationManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {NotificationChannel notificationChannel=new NotificationChannel("id","name",NotificationManager.IMPORTANCE_HIGH);notificationManager.createNotificationChannel(notificationChannel);}Notification.Builder builder=new Notification.Builder(context);if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {builder.setChannelId("id");}builder.setContentText("接收到广播");builder.setSmallIcon(R.drawable.icon2);builder.setWhen(System.currentTimeMillis());builder.setAutoCancel(true);Notification notification=builder.build();notificationManager.notify(2333,notification);}
}
2.注册广播接收者&&设置定时发送广播闹钟
MainActivity.java文件
public class MainActivity extends AppCompatActivity {private MyBroadcastReceiver myBroadcastReceiver;protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//注册广播接收者-接收"MyTestBroadcast"广播myBroadcastReceiver=new MyBroadcastReceiver(MainActivity.this);IntentFilter intentFilter=new IntentFilter();intentFilter.addAction("MyTestBroadcast");registerReceiver(myBroadcastReceiver,intentFilter);//获取控件Button button=findViewById(R.id.button);button.setOnClickListener(new View.OnClickListener() {public void onClick(View view) {//创建Intent意图,用于发送广播Intent intent=new Intent().setAction("MyTestBroadcast");//根据Intent意图创建PendingIntent等待意图PendingIntent pendingIntent=PendingIntent.getBroadcast(MainActivity.this,2333,intent,PendingIntent.FLAG_IMMUTABLE);//获取执行时间//创建CalendarCalendar calendar=Calendar.getInstance();//将时间设置为当前时间calendar.setTimeInMillis(System.currentTimeMillis());//增加时间calendar.add(Calendar.SECOND,7);//获取最终时间long time=calendar.getTimeInMillis();//创建AlarmManager闹钟管理者AlarmManager alarmManager= (AlarmManager) getSystemService(ALARM_SERVICE);//设置闹钟alarmManager.set(AlarmManager.RTC_WAKEUP,time,pendingIntent);//销毁页面MainActivity.this.finish();}});}protected void onDestroy() {super.onDestroy();// 不 注销广播接收者if(myBroadcastReceiver!=null){//unregisterReceiver(myBroadcastReceiver);}}
}
相关文章:
AlarmManager闹钟管理者
AlarmManager是Android提供的一个全局定时器,利用系统闹钟定时发送广播。这样做的好处是:如果App提前注册闹钟的广播接收器,即使App退出了,只要定时到达,App就会被唤醒响应广播事件。 AlarmManager设置的PendingInten…...
Opencv实现的三次样条曲线(Cubic Spline)插值
1.样条曲线简介 样条曲线(Spline)本质是分段多项式实函数,在实数范围内有: S:[a,b]→R ,在区间 [a,b] 上包含 k 个子区间[ti−1,ti],且有: at0<t1<⋯<tk−1<tkb(1) 对应每一段区间 i 的存在多项式&…...
【ElasticSearch系列-03】ElasticSearch的高级句法查询Query DSL
ElasticSearch系列整体栏目 内容链接地址【一】ElasticSearch下载和安装https://zhenghuisheng.blog.csdn.net/article/details/129260827【二】ElasticSearch概念和基本操作https://blog.csdn.net/zhenghuishengq/article/details/134121631【二】ElasticSearch的高级查询Quer…...
【C++ 系列文章 -- 程序员考试 201811 下午场 C++ 专题 】
1.1 C 题目六 阅读下列说明和C代码,填写程序中的空(1) ~(5),将解答写入答题纸的对应栏内。 【说明】 以下C代码实现一个简单乐器系统,音乐类(Music)可以使用…...
javaEE -15( 13000字 JavaScript入门 - 2)
一:JavaScript(WebAPI) JS 分成三个大的部分 ECMAScript: 基础语法部分DOM API: 操作页面结构BOM API: 操作浏览器 WebAPI 就包含了 DOM BOM,这个是 W3C 组织规定的. (和制定 ECMAScript 标准的大佬们不是一伙人). 前面学的 JS 基础语法主要学的是 …...
AWS SAP-C02教程11-解决方案
本章中,会根据一些常见场景的解决方案或者AWS的某一方面的总结,带你了解AWS各个组件之间的配合使用、如何在解决方案中选择组件以及如何避开其本身限制实现需求。 目录 1 处理高并发解决方案(Handing Extreme Rates)2 日志管理(AWS Managed Logs)3 部署解决方案(Deploy…...
ClickHouse Java多参UDF
一、环境版本 环境版本docker clickhouse22.3.10.22 docker pull clickhouse/clickhouse-server:22.3.10.22二、XML配置 2.1 配置文件 # 创建udf配置文件 vim /etc/clickhouse-server/demo_function.xml<functions><function><type>executable</type&…...
修改Typora默认微软雅黑字体
修改Typora字体 写在前面 我最近在折腾windows电脑,从macos转像windows不容易啊,因为键盘快捷键经常弄错,这篇文章就是修改Typora中字体显示的问题。 正文内容 我发现在windows中,字体非常的难看,微软雅黑也太丑了…...
ESP32网络开发实例-Web服务器显示LM35传感器数据
Web服务器显示LM35传感器数据 文章目录 Web服务器显示LM35传感器数据1、LM35介绍2、软件准备3、硬件准备4、代码实现4.1 LM35与ADS1115驱动4.2 Web服务器显示LM35传感器数据本文将介绍有关如何在ESP32的Web服务器中显示LM35 温度传感器数据。 1、LM35介绍 LM35 用于测量物体或…...
ATFX汇市:美联储11月利率决议再暂停加息,紧缩货币政策或已接近尾声
ATFX汇市:11月美联储利率决议结果在今日2:00公布,其中提到:美联储寻求以2%的速度实现最大的就业和通胀率,为了达成这些目标,美联储决定将联邦基金利率的目标区间维持在5.25%~5.5%;委员会将会考虑货币政策的…...
g.Grafana之Gauge的图形说明
直接上操作截图 1. 创建一个新的Dashboard 2.为Dashboard创建变量 【General】下的Name与Label的名称自定义 【Query options】 下的Group可以填写Zabbix内的所有组/.*/ , 然后通过Regex正则过滤需要的组名 3.设置Dashboard的图形 我使用文字来描述下这个图 1.我们在dash…...
MySQL笔记--Ubuntu安装MySQL并基于C++测试API
目录 1--安装MySQL 2--MySQL连接 3--代码案例 1--安装MySQL # 安装MySQL-Server sudo apt install mysql-server# 设置系统启动时自动开启 sudo systemctl start mysql # sudo systemctl enable mysql# 检查MySQL运行状态 sudo systemctl status mysql# 进入MySQL终端 sudo…...
与AI对话的艺术:如何优化Prompt以获得更好的响应反馈
前言 在当今数字化时代,人工智能系统已经成为我们生活的一部分。我们可以在智能助手、聊天机器人、搜索引擎等各种场合与AI进行对话。然而,要获得有益的回应,我们需要学会与AI进行有效的沟通,这就涉及到如何编写好的Prompt。 与…...
outlook是什么软件outlook邮箱撤回邮件方法
Outlook是微软公司开发的一款邮件客户端,也是Office办公套件的一部分。它可以与多个电子邮件服务提供商(如Outlook.com、Exchange、Gmail等)集成,用户可以使用Outlook来发送、接收和管理电子邮件、日历、联系人、任务等信息。本篇…...
电脑如何录制小视频
如果你想在你的电脑上录制视频分享给你的朋友或者亲人,无论你的电脑是win还是mac,都可以在本篇文章中找到电脑录制视频的详细教程。小编为你们整理了2种不同系统电脑的录制详细流程,继续阅读查看吧! 第一部分:windows…...
vue使用百度富文本
🔥博客主页: 破浪前进 🔖系列专栏: Vue、React、PHP ❤️感谢大家点赞👍收藏⭐评论✍️ 1、下载UEditor 链接已放到文章中了 2、上传到项目目录中 一般上传到public下,方便到时候打包进去,以免…...
【Springboot】集成Swagger
引入依赖 <dependency><groupId>io.springfox</groupId><artifactId>springfox-boot-starter</artifactId><version>3.0.0</version> </dependency> 浏览器 启动项目后 在浏览器中输入地址 localhost:端口号/swagger-ui/ 使…...
[SpringCloud | Linux] CentOS7 部署 SpringCloud 微服务
目录 一、环境准备 1、工具准备 2、虚拟机环境 3、Docker 环境 二、项目准备 1、配置各个模块(微服务)的 Dockerfile 2、配置 docker-compose.yml 文件 3、Maven 打包 4、文件整合并传输 三、微服务部署 1、部署至 Docker 2、访问微服务 四…...
阿里面试:让代码不腐烂,DDD是怎么做的?
说在前面 在40岁老架构师 尼恩的读者交流群(50)中,最近有小伙伴拿到了一线互联网企业如阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题: 谈谈你的高并发落地经验? 谈谈你对DDD的理解…...
NoSQL数据库使用场景以及架构介绍
文章目录 一. 什么是NoSQL?二. NoSQL分类三. NoSQL与关系数据库有什么区别四. NoSQL主要优势和缺点五. NoSQL体系框架 其它相关推荐: 系统架构之微服务架构 系统架构设计之微内核架构 鸿蒙操作系统架构 架构设计之大数据架构(Lambda架构、Kap…...
OpenClaw+Phi-3-mini-128k-instruct:自动化代码审查系统
OpenClawPhi-3-mini-128k-instruct:自动化代码审查系统 1. 为什么需要个人级代码审查助手 作为独立开发者,我经常陷入这样的困境:在GitHub上提交PR后,要么苦等同事review,要么自己反复检查代码质量。传统CI工具只能做…...
SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现
SeqGPT-560m生成效果实测:在中文语法纠错与润色任务中的表现 1. 项目背景介绍 今天我们来实测一个特别实用的AI工具——SeqGPT-560m在中文语法纠错与文本润色方面的表现。这个轻量级模型虽然参数不多,但在处理中文文本时展现出了令人惊喜的能力。 本项…...
SDMatte+在影视后期应用:绿幕替代方案探索、道具透明化处理与VFX资产快速提取
SDMatte在影视后期应用:绿幕替代方案探索、道具透明化处理与VFX资产快速提取 1. 影视后期中的抠图挑战 在影视后期制作中,高质量的抠图技术是视觉特效(VFX)的基础。传统绿幕拍摄虽然成熟,但存在诸多限制: 需要专门的拍摄场地和…...
RK3588 android12休眠唤醒后以太网不可用
现象:开机后连接网线可正常使用,系统休眠后再次唤醒后网络不通,等待约30秒后看门狗复位,gmac重新初始化后可继续使用。(此问题还会导致屏幕唤醒点亮延时1-2秒)日志:休眠唤醒后提示报错如下&…...
Graphormer开源镜像部署指南:3.7GB轻量模型GPU快速启动(RTX4090实测)
Graphormer开源镜像部署指南:3.7GB轻量模型GPU快速启动(RTX4090实测) 1. 项目概述 Graphormer是一种基于纯Transformer架构的图神经网络,专门为分子图(原子-键结构)的全局结构建模与属性预测而设计。该模…...
06_Cursor之上下文管理与代码库理解
关键字:上下文管理, 代码库理解, 符号引用, Git集成, 图像上下文, Cursor 06_Cursor之上下文管理与代码库理解 Cursor知识体系 Cursor知识体系(续) | -- 上下文管理层 | -- 代码库级理解 | | -- 项目结构分析 | | -- 依赖关系追…...
Symfony Monolog Bundle终极指南:如何快速搭建专业日志系统
Symfony Monolog Bundle终极指南:如何快速搭建专业日志系统 【免费下载链接】monolog-bundle Symfony Monolog Bundle 项目地址: https://gitcode.com/gh_mirrors/mo/monolog-bundle Symfony Monolog Bundle是Symfony框架中一款强大的日志管理工具࿰…...
终极MCP协议指南:从协议原理到Awesome MCP Servers完整实践
终极MCP协议指南:从协议原理到Awesome MCP Servers完整实践 【免费下载链接】awesome-mcp-servers A collection of MCP servers. 项目地址: https://gitcode.com/GitHub_Trending/aweso/awesome-mcp-servers MCP(Model Context Protocol…...
M5Stamp C3 Mate LED驱动库:基于RMT的WS2812B精简控制方案
1. 项目概述M5StampC3LED 是专为 M5Stamp C3 Mate 模块设计的 LED 控制库,其本质是一个轻量级封装层,用于驱动板载的 Adafruit NeoPixel(WS2812B 兼容)RGB LED。该库不直接实现底层时序协议,而是基于 ESP-IDF 或 Ardui…...
有源vs无源晶振怎么选?从接法差异到成本对比的5个实战建议
有源与无源晶振选型指南:5个关键决策维度与实战技巧 在硬件设计领域,时钟信号如同系统的心跳,而晶振的选择直接影响着整个电路的稳定性和可靠性。面对市场上琳琅满目的有源和无源晶振,工程师常常陷入选择困境——是追求有源晶振的…...
