当前位置: 首页 > news >正文

安卓手机APP开发___设置闹钟

安卓手机APP开发___设置闹钟

目录

概述

设置不精确闹钟

在特定时间后发出闹钟

在特定时间范围内触发闹钟

以大致有规律的时间间隔响起重复闹钟

设置精确的闹钟

系统会在未来的某个精确时刻调用精确闹钟。

可能不需要精确闹钟的用例

设置精确闹钟的方法

系统资源消耗

声明适当的精确闹钟权限

使用 SCHEDULE_EXACT_ALARM 权限


概述

闹钟(基于 AlarmManager 类)为您提供了一种在应用生命周期之外
执行基于时间的操作的方法。例如,您可以使用闹钟启动长时间运行
的操作,如每天启动一次服务以下载天气预报。

闹钟具有以下特征:

    它们可让您按设定的时间和/或间隔触发 intent。

    您可以将它们与广播接收器结合使用,以安排作业或 WorkRequest 以执行其他操作。

    它们在应用之外运行,因此即使您的应用未运行,甚至设备本身处于休眠状态,
    您也可以使用它们触发事件或操作。

    它们可以帮助您最大限度地减少应用的资源需求。您可以安排操作,而无需
    依赖计时器或持续运行服务。

注意 :对于保证在应用生命周期内发生的计时操作,请考虑将 Handler 类与
Timer 和 Thread 结合使用。此方法可让 Android 更好地控制系统资源。

设置不精确闹钟

如果应用设置了不精确闹钟,系统会在未来的某个时间点发出闹钟。不精确闹钟可
在遵循低电耗模式等省电限制的同时,保证闹钟的发送时间。

注意 :大多数应用都可以使用不精确的闹钟来调度任务和事件。如果应用的核心
功能依赖于精确计时的闹钟(例如闹钟应用或日历应用),则可以改用精确闹钟。

开发者可以利用以下 API 保证来自定义不精确闹钟的发送时间。


在特定时间后发出闹钟

如果您的应用调用 set()、setInexactRepeating() 或 setAndAllowWhileIdle(),
则闹钟绝不会在提供的触发时间之前响起。

在 Android 12(API 级别 31)及更高版本中,除非已实施任何节电限制
(例如省电模式或低电耗模式),否则系统会在提供的触发时间后的 1
小时内调用闹钟。

在特定时间范围内触发闹钟

如果您的应用调用 setWindow(),则闹钟绝不会在所提供的触发时间之前响起。
除非任何省电限制生效,否则闹钟会在指定的时间范围内(从指定的触发时间开始)
内发出。

如果您的应用以 Android 12 或更高版本为目标平台,则系统可以将对带时间范
围的不精确闹钟的调用延迟至少 10 分钟。因此,600000 下的 windowLengthMillis
参数值会被裁剪为 600000。

以大致有规律的时间间隔响起重复闹钟

如果您的应用调用 setInexactRepeating(),系统会调用多个闹钟:

    第一个闹钟会在指定的时间范围内触发,从指定的触发时间开始。
    后续闹钟通常会在指定时间范围过后响起。两次连续的闹铃调用的间隔
    时间可能会有所不同。

设置精确的闹钟

系统会在未来的某个精确时刻调用精确闹钟。

大多数应用都可以使用不精确闹钟来调度任务和事件,以完成几个常见用例。
如果应用的核心功能依赖于精确计时的闹钟(例如闹钟应用或日历应用),
则可以改用精确闹钟。
注意 :如果您的应用以 Android 12 或更高版本为目标平台,您必须声明
一项“闹钟和提醒”权限。否则,会发生 SecurityException。

可能不需要精确闹钟的用例

以下列表显示了可能不需要精确闹钟的常见工作流:

在应用的生命周期内调度计时操作
    Handler 类包含几种处理计时操作的好方法,例如在应用处于活动
    状态时,每 n 秒执行一次工作:postAtTime() 和 postDelayed()。
    请注意,这些 API 依赖于系统正常运行时间,而不是实时。
安排好的后台工作,例如更新应用和上传日志
    WorkManager 提供了一种安排时间敏感型定期工作的方法。您可以
    提供重复间隔和 flexInterval(至少 15 分钟),以定义工作的
    精细运行时间。
应在特定时间过后执行的用户指定操作(即使系统处于空闲状态)
    使用不精确闹钟。具体来说,就是调用 setAndAllowWhileIdle()。
应在特定时间过后执行的用户指定操作
    使用不精确闹钟。具体来说,就是调用 set()。
可在指定时间范围内执行的用户指定操作
    使用不精确闹钟。具体来说,就是调用 setWindow()。请注意,如
    果应用以 Android 12 或更高版本为目标平台,则允许的最短窗口
    时长为 10 分钟。

设置精确闹钟的方法

您的应用可以使用以下方法之一设置精确闹钟。这些方法按顺序排列,
因此更靠近列表底部的方法可处理对时间更重要的任务,但需要更多系统资源。

setExact()

    只要其他省电措施没有生效,在未来一个近乎精确的时间就会触发闹钟。

    除非应用的工作对用户来说非常关键,否则使用此方法设置精确的闹钟。
setExactAndAllowWhileIdle()

    在未来近乎精确的时间调用闹钟,即使采用了省电措施也是如此。
setAlarmClock()

    在未来某个精确时间启动闹钟。由于用户非常容易看到这些闹钟,
    因此系统绝不会调整其触发时间。系统会将这些闹钟识别为最关键
    的闹钟,并在必要时关闭低功耗模式以实现闹钟。
    注意: 当您的应用使用此方法安排精确闹钟时,闹钟调用可能会
    严重影响设备的资源,如电池续航时间。

系统资源消耗

当系统触发您的应用设置的确切闹钟时,设备会消耗大量的资源(如电池
续航时间),尤其是在设备处于节能模式时。此外,系统无法轻松地对
这些请求进行批处理,以便更高效地使用资源。

强烈建议您尽可能创建不精确闹钟。如需执行时间更长的工作,请使用
闹钟 BroadcastReceiver 中的 WorkManager 或 JobScheduler 进行调度。
如需在设备处于低电耗模式时执行工作,请使用 setAndAllowWhileIdle()
创建不精确闹钟,然后从该闹钟启动作业。
注意 :Android 将精确闹钟视为对时间敏感的重要中断。因此,精确的
闹钟不受前台服务启动限制的影响。

声明适当的精确闹钟权限

如果您的应用以 Android 12 或更高版本为目标平台,您必须获得
“闹钟和提醒”特殊应用访问权限。为此,请在应用的清单文件中声明
SCHEDULE_EXACT_ALARM 权限,如以下代码段所示:

<manifest ...><uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/><application ...>...</application>
</manifest>

如果您的应用以 Android 13(API 级别 33)或更高版本为目标平台,您可以
选择声明 SCHEDULE_EXACT_ALARM 或 USE_EXACT_ALARM 权限。

<manifest ...><uses-permission android:name="android.permission.USE_EXACT_ALARM"/><application ...>...</application>
</manifest>

虽然 SCHEDULE_EXACT_ALARM 权限和 USE_EXACT_ALARM 权限表示的功能相同,
但权限授予方式不同,支持不同的用例。仅当应用中面向用户的功能需要
精确计时的操作时,您的应用才应使用精确闹钟,并声明 SCHEDULE_EXACT_ALARM
或 USE_EXACT_ALARM 权限。

USE_EXACT_ALARM

    已自动授予
    用户无法撤消此操作
    遵守即将实施的 Google Play 政策
    有限用例

SCHEDULE_EXACT_ALARM

    用户授予的权限
    更广泛的应用场景
    应用应确认权限未被撤消

对于以 Android 13(API 级别 33)及更高版本为目标平台的应用的新安装,
系统不会预先授予 SCHEDULE_EXACT_ALARM 权限。如果用户通过备份和恢复
操作将应用数据转移到搭载 Android 14 的设备,新设备上的
SCHEDULE_EXACT_ALARM 权限会被拒绝。不过,如果现有应用已拥有此权限,
则当设备升级到 Android 14 时,系统会预先授予此权限。

注意:如果使用 OnAlarmListener 对象(如 setExact API)设置精确闹钟,
则无需 SCHEDULE_EXACT_ALARM 权限。

使用 SCHEDULE_EXACT_ALARM 权限

与 USE_EXACT_ALARM 不同,SCHEDULE_EXACT_ALARM 权限必须由用户授予。
用户和系统都可以撤消 SCHEDULE_EXACT_ALARM 权限。

如需检查是否已向您的应用授予相应权限,请先调用 canScheduleExactAlarms(),
然后再尝试设置精确闹钟。撤消应用的 SCHEDULE_EXACT_ALARM 权限后,应用会
停止运行,并取消将来的所有精确闹钟。这也意味着,canScheduleExactAlarms()
返回的值在应用的整个生命周期内有效。

向您的应用授予 SCHEDULE_EXACT_ALARMS 权限后,系统会向其发送
ACTION_SCHEDULE_EXACT_ALARM_PERMISSION_STATE_CHANGED 广播。
您的应用应实现广播接收器,以便执行以下操作:

    确认您的应用仍具有特殊应用访问权限。为此,请调用 canScheduleExactAlarms()。
    此检查可防止您的应用出现以下情况:用户授予应用该权限,然后几乎立即撤消该权限。
    根据应用的当前状态,重新调度应用需要的任何精确的闹钟。此逻辑应与您的
    应用接收 ACTION_BOOT_COMPLETED 广播时所执行的操作类似。

要求用户授予 SCHEDULE_EXACT_ALARM 权限

该选项称为“允许设置闹钟和提醒”
图 1. 系统设置中的“闹钟和提醒”特殊应用访问权限页面,用户可以在该页面中
允许您的应用设置精确的闹钟。

如有必要,您可以将用户转到系统设置中的闹钟和提醒屏幕,如图 1 所示。
为此,请完成以下步骤:

    在应用的界面中,向用户解释为什么您的应用需要调度精确的闹钟。
    调用包含 ACTION_REQUEST_SCHEDULE_EXACT_ALARM intent 操作的 intent。

相关文章:

安卓手机APP开发___设置闹钟

安卓手机APP开发___设置闹钟 目录 概述 设置不精确闹钟 在特定时间后发出闹钟 在特定时间范围内触发闹钟 以大致有规律的时间间隔响起重复闹钟 设置精确的闹钟 系统会在未来的某个精确时刻调用精确闹钟。 可能不需要精确闹钟的用例 设置精确闹钟的方法 系统资源消耗…...

如何评价GPT-4o

目录 1.概述 2.对比分析 2.1.版本 2.2.区别 2.2.1.技术方面的差异 2.2.2.性能提升 2.2.3.应用领域扩展 2.2.4.对未来发展的影响 3.技术能力 4.个人感受 1.概述 GPT-4o的发布无疑是人工智能领域的一次重要进展。作为GPT-4的升级版本&#xff0c;GPT-4o不仅在处理速度…...

自定义窗口事件循环系统

1.定义事件类型&#xff0c;mouse&#xff0c;wheel&#xff0c;drag&#xff0c;view。已处理的事件&#xff0c;accept需设置为true&#xff0c;防止重叠热区继续穿透。记录事件生成时间&#xff0c;全局位置和当前帧窗口下位置。 2.定义事件响应系统interactionSystem&…...

随机森林算法教程(个人总结)

背景 随机森林&#xff08;Random Forest&#xff09;是一种集成学习方法&#xff0c;主要用于分类和回归任务。它通过构建多个决策树并将其结果进行集成&#xff0c;提升模型的准确性和鲁棒性。随机森林在处理高维数据和防止过拟合方面表现出色&#xff0c;是一种强大的机器学…...

解决Android studio 一直提示下载gradle-xxx-all.zip问题

今天用AndroidStdiod打开一个新工程的时候&#xff0c;发现项目一直卡在正在下载gradle-xxx-all.zip的任务上&#xff0c;网络出奇的慢&#xff0c;即使配了VPN也无济于事&#xff0c;于是按照以往经验&#xff1a;将gradle-xxx-all.zip下载到.gradle\gradle\wrapper\dists目录…...

3DEXPERIENCE DELMIA Role: RVN - Robotics Virtual Commissioning Analyst

Discipline: Robotics Role: RVN - Robotics Virtual Commissioning Analyst 通过准确地模拟连接到PLC程序的机器人、设备和传感器&#xff0c;在制造虚拟孪生上执行虚拟调试情景 为任何机器人角色的多周期情景创建传感器&#xff0c;生成和变换零件启用 PLC 程序的虚拟验证和…...

js知识点之闭包

闭包 什么是闭包 闭包&#xff0c;是 JavaScript 中一个非常重要的知识点&#xff0c;也是我们前端面试中较高几率被问到的知识点之一。 打开《JavaScript 高级程序设计》和《 JavaScript 权威指南》&#xff0c;会发现里面针对闭包的解释各执一词&#xff0c;在网络上搜索关…...

LORA微调,让大模型更平易近人

技术背景 最近和大模型一起爆火的&#xff0c;还有大模型的微调方法。 这类方法只用很少的数据&#xff0c;就能让大模型在原本表现没那么好的下游任务中“脱颖而出”&#xff0c;成为这个任务的专家。 而其中最火的大模型微调方法&#xff0c;又要属LoRA。 增加数据量和模…...

LabVIEW全自动样品处理系统有哪些优势?

基于LabVIEW的全自动样品处理系统在现代科研和工业应用中展现出显著的优势&#xff0c;其在数据采集、分析和控制方面的性能使其成为提高效率和精度的理想选择。以下是该系统的详细优势&#xff1a; 高效自动化 LabVIEW的图形化编程语言极大地简化了自动化流程的开发。用户可…...

shell脚本操作http请求的返回值——shell处理json格式数据

日常工作中&#xff0c;我们经常会遇到http请求会返回大量格式固定的数据&#xff0c;而我们只需要其中的一部分&#xff0c;那么怎么提取我们想要的字段呢。 这里会介绍一种用shell脚本处理http请求返回&#xff0c;或者处理json格式数据的方式。 这里我们用到了 jq这个强大的…...

leetcode力扣 300. 最长递增子序列 II

给你一个整数数组 nums &#xff0c;找到其中最长严格递增子序列的长度。 子序列 是由数组派生而来的序列&#xff0c;删除&#xff08;或不删除&#xff09;数组中的元素而不改变其余元素的顺序。例如&#xff0c;[3,6,2,7] 是数组 [0,3,1,6,2,2,7] 的子序列。 示例 1&#…...

C++_vector简单源码剖析:vector模拟实现

文章目录 &#x1f680;1.迭代器&#x1f680;2.构造函数与析构函数⚡️2.1 默认构造函数vector()⚡️2.2 vector(int n, const T& value T())⚡️内置类型也有构造函数 ⚡️2.3 赋值重载operator⚡️2.4 通用迭代器拷贝⚡️2.5 vector(initializer_list<T> il)⚡️…...

第3章 数据链路层

王道学习 考纲内容 &#xff08;一&#xff09;数据链路层的功能 &#xff08;二&#xff09;组帧 &#xff08;三&#xff09;差错控制 检错编码&#xff1b;纠错编码 &#xff08;四&#xff09;流量控制与可靠传输机制 流量控制、可靠传输与滑动窗口…...

使用OrangePi KunPeng Pro部署AI模型

目录 一、OrangePi Kunpeng Pro简介二、环境搭建三、模型运行环境搭建(1)下载Ollama用于启动并运行大型语言模型(2)配置ollama系统服务(3)启动ollama服务(4)启动ollama(5)查看ollama运行状态四、模型部署(1)部署1.8b的qwen(2)部署2b的gemma(3)部署3.8的phi3(4)部署4b的qwen(5)部…...

SpringMVC 数据映射VC

从 view 层发送请求到Controller&#xff0c;在Controller中获取参数&#xff1a; 在不输入值时会报400&#xff0c;参数错误 在不输入值时num默认为null 没有找到对应标签名称叫nums的&#xff0c;输入任何值时都报400 设置required默认值为false&#xff0c;即使表单没有nums…...

Clickhouse Bitmap 类型操作总结—— Clickhouse 基础篇(四)

文章目录 创建 Bitmap 对象Bitmap 转换为整数数组计算总数&#xff08;去重&#xff09;值指定start, end 索引生成子 Bitmap指定 start 索引和数量限制生成子 Bitmap指定偏移量生成子 Bitmap是否包含指定元素两个 Bitmap 是否存在相同元素一个是否为另一个 Bitmap 的子集求最小…...

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量,一切的好事都应该有权利发生

202474读书笔记|《我自我的田渠归来》——愿你拥有向上的力量 《我自我的田渠归来》作者张晓风&#xff0c;被称为华语散文温柔的一支笔&#xff0c;她的短文很有味道&#xff0c;角度奇特&#xff0c;温柔慈悲而敏锐。 很幸运遇到了这本书&#xff0c;以她的感受重新认识一些事…...

SheetJS V0.17.5 导入 Excel 异常修复 Invalid HTML:could not find<table>

导入 Excel 提示错误&#xff1a;Invalid HTML:could not find<table> 检查源代码 发现 table 属性有回车符 Overview: https://docs.sheetjs.com/docs/ Source: https://git.sheetjs.com/sheetjs/sheetjs/issues The public-facing websites of SheetJS: sheetjs.com…...

重学java51.Collections集合工具类、泛型

"我已不在地坛&#xff0c;地坛在我" —— 《想念地坛》 24.5.28 一、Collections集合工具类 1.概述:集合工具类 2.特点: a.构造私有 b.方法都是静态的 3.使用:类名直接调用 4.方法: static <T> boolean addAll(collection<? super T>c,T... el…...

OSPF扩展知识2

FA-转发地址 正常 OSPF 区域收到的 5 类 LSA 不存在 FA 值&#xff1b; 产生 FA 的条件: 1、5类LSA ----假设 R2为 ASBR&#xff0c;90/0 口工作的 OSPF 中&#xff0c;g0/1 口工作在非 ospf 协议或不同 ospf 进程中&#xff1b;若 g0/1 也同时宣告在和 g0/0 相同的 OSPF 进程…...

为什么我放弃Python选择maxscript开发3dsMax插件?性能对比实测

为什么我放弃Python选择maxscript开发3dsMax插件&#xff1f;性能对比实测 当技术美术&#xff08;TA&#xff09;或开发者面临3dsMax插件开发的技术选型时&#xff0c;性能、开发效率和原生集成能力往往是核心考量因素。本文将基于实际测试数据&#xff0c;从执行速度、API调用…...

Maxwell Fields Calculator双模式切换指南:堆栈与代数表达式输入实战解析

Maxwell Fields Calculator双模式切换指南&#xff1a;堆栈与代数表达式输入实战解析 在电磁仿真领域&#xff0c;Maxwell Fields Calculator一直是工程师进行后处理分析的利器。随着2025 R1版本的推出&#xff0c;一项革命性的功能——双模式表达式输入&#xff0c;彻底改变了…...

3分钟彻底搞定Axure RP汉化:免费中文语言包完整指南

3分钟彻底搞定Axure RP汉化&#xff1a;免费中文语言包完整指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包&#xff0c;不定期更新。支持 Axure 9、Axure 10。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn 还在…...

避开Verilog数据转换的坑:ASCII码转16进制时,大小写处理你真的做对了吗?

Verilog字符转换实战&#xff1a;如何正确处理ASCII与十六进制的大小写问题 在数字系统设计中&#xff0c;数据格式转换是最基础却又最容易出错的环节之一。最近在review团队一位新成员的UART通信模块代码时&#xff0c;发现一个典型的"大小写陷阱"——当十六进制数据…...

Navicat数据库自动备份实战:如何设置定时任务避免数据丢失

Navicat数据库自动备份实战&#xff1a;如何设置定时任务避免数据丢失 数据是现代企业的核心资产&#xff0c;一次意外的数据丢失可能造成难以估量的损失。作为数据库管理工具中的佼佼者&#xff0c;Navicat提供了强大的自动备份功能&#xff0c;能够帮助中小企业和个人开发者建…...

如何一站式解决漫画格式转换难题:CBconvert完整指南

如何一站式解决漫画格式转换难题&#xff1a;CBconvert完整指南 【免费下载链接】cbconvert CBconvert is a Comic Book converter 项目地址: https://gitcode.com/gh_mirrors/cb/cbconvert 还在为不同设备上的漫画格式兼容性问题而烦恼吗&#xff1f;CBconvert作为一款…...

3步掌握Vortex:让250+游戏模组管理像专业开发者一样简单

3步掌握Vortex&#xff1a;让250游戏模组管理像专业开发者一样简单 【免费下载链接】Vortex Vortex: Nexus-Mods开发的游戏模组管理器&#xff0c;用于简化模组的安装和管理过程。 项目地址: https://gitcode.com/gh_mirrors/vor/Vortex 价值定位&#xff1a;重新定义游…...

数据库优化:高效查询GUID的技巧

在日常的数据库操作中,如何高效地查询数据是一个永恒的话题。特别是当我们处理大型数据集和需要在文本字段中查找特定模式(如GUID)时,查询效率显得尤为关键。今天,我将分享一种优化查询GUID的方法,帮助你从长达数小时的查询时间中解脱出来。 背景 假设我们有一个数据库…...

别再死记硬背公式了!用Simulink玩转单相全桥逆变,从方波驱动到IGBT参数设置全解析

用Simulink玩转单相全桥逆变&#xff1a;从方波驱动到IGBT参数设置的实战指南 电力电子领域的学习常常陷入公式推导的泥潭&#xff0c;而Simulink提供的可视化仿真环境就像一盏明灯。想象一下&#xff0c;当你调整一个参数就能立即看到波形变化&#xff0c;比纸上推导要直观十倍…...

AI驱动的科研绘图革命:DeTikZify如何终结图表代码的手动时代

AI驱动的科研绘图革命&#xff1a;DeTikZify如何终结图表代码的手动时代 【免费下载链接】DeTikZify Synthesizing Graphics Programs for Scientific Figures and Sketches with TikZ 项目地址: https://gitcode.com/gh_mirrors/de/DeTikZify 当deadline遇上绘图难题&a…...