安卓手机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。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/19064.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万亿应急国债项目之通信指挥类应急装备多链路聚合通信设备在应急行业中的重要作用

万亿应急国债项目的推出&#xff0c;无疑是我国在应急领域的一次重大举措。在这一宏大蓝图中&#xff0c;通信指挥类应急装备的多链路聚合通信设备显得尤为重要&#xff0c;其在应急行业中所发挥的作用&#xff0c;堪称不可或缺的关键一环。 通信指挥是应急响应中的核心环节&a…

QT C++ 读写mySQL数据库 图片 例子

在上篇文章中描述了怎样搭建读写数据库的环境。 本文更进一步&#xff0c;描述了读写mySQL数据库&#xff0c;字符、整型数字、图片。读写图片相对难点。 数据库的图片字段用BLOB&#xff0c;如果图片较大要用longblob,否则会报错。 另外&#xff0c;读写数据库都使用了短连…

Pytorch 星号*放在tensor前的作用

假如有一个多维tensor&#xff0c;名为id&#xff0c;那么*id的意思是什么呢&#xff1f; GPT答&#xff1a; 如果 id 是一个多维张量&#xff0c;那么 *id 在这种情况下会将这个多维张量解包成一个张量序列&#xff0c;其中每个元素都是一个更低维度的张量。具体来说&#x…

图形学初识--空间变换

文章目录 前言正文矩阵和向量相乘二维变换1、缩放2、旋转3、平移4、齐次坐标下总结 三维变换1、缩放2、平移3、旋转绕X轴旋转&#xff1a;绕Z轴旋转&#xff1a;绕Y轴旋转&#xff1a; 结尾&#xff1a;喜欢的小伙伴可以点点关注赞哦 前言 前面章节补充了一下基本的线性代数中…

前端Vue小兔鲜儿电商项目实战Day02

一、Pinia快速入门 此处见&#xff1a;Vue从入门到实战Day12-CSDN博客 二、创建项目并精细化配置 1. 创建项目 2. src目录调整 ①删除一些初始化的默认文件 清空assets、components、store、views文件夹下的内容&#xff1b; ②修改剩余代码内容 router/index.js import …

一个程序员的牢狱生涯(44)询问

星期一 询 问 在号子里开始了下午坐班的时候,过道内的大铁栅栏被管教打开,我听到开锁的声音后,心里变得激动起来。盼望着脚步声能停在我们的号子门口,然后打开铁门,喊一声“眼镜,出来!”。 通道内这次进来的是秦所,但他并没有在我们号子门口停留,只是在走过的时候,低…

华为昇腾310 ATC模型转换工具安装

参考: https://bbs.huaweicloud.com/blogs/393282?utm_source=zhihu&utm_medium=bbs-ex&utm_campaign=other&utm_content=content https://www.hiascend.com/document/detail/zh/canncommercial/601/inferapplicationdev/atctool/atctool_0004.html 1、基本工具…

js知识点之闭包

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

Java中如何指定jdk的版本运行jar包

你的jdk安装的目录\bin\java -jar 你的jar包名字.jar 这是我的代码示例 C:\Users\86177\.jdks\corretto-17.0.10\bin\java -jar big_event_study2-0.0.1- SNAPSHOT.jar

23种设计模式之一— — — —装饰模式详细介绍与讲解

装饰模式详细讲解 一、定义二、装饰模式结构核心思想模式角色模式的UML类图应用场景模式优点模式缺点 实例演示图示代码演示运行结果 一、定义 装饰模式&#xff08;别名&#xff1a;包装器&#xff09; 装饰模式&#xff08;Decorator Pattern&#xff09;是结构型的设计模式…

LeetCode 每日一题 数学篇 2651.计算列车到站时间

给你一个正整数 arrivalTime 表示列车正点到站的时间&#xff08;单位&#xff1a;小时&#xff09;&#xff0c;另给你一个正整数 delayedTime 表示列车延误的小时数。 返回列车实际到站的时间。 注意&#xff0c;该问题中的时间采用 24 小时制。 int findDelayedArrivalTi…

学业辅导导师:文心一言智能体详细介绍和开发

一、前言 本期题目 开发方向&#xff1a;学习成长类 解读&#xff1a; AI技术在学习成长方向的应用正日益增多&#xff0c;本期赛题需围绕该方向开发智能体包括但不限于:作文辅导助手、个性化学习助手、考试助手、各垂类教育内容专家等 二、我的智能体&#xff1a;学业辅导…

macbook中foxmail的通讯录迁移

之前windows中用习惯了foxmail,换成macbook后,还是沿用foxmail。使用一段时间后,确实受不了foxmail的不便:1、版本比较低1.5.6,很多windows新版的功能都没有;2、动不动莫名其妙崩溃,写了半天的邮件,点击发送就直接崩了,又得重新写。 忍耐了几个月后,下定决心换成网易…

2.10 mysql设置远程访问权限

2.10 mysql设置远程访问权限 目录1. 管理员运行mysql命令窗口2. 使用 root 用户重新登录 MySQL3. 修改用户权限4. 修改mysql安装目录下的my.ini 目录 说明&#xff1a; Mysql8.0 设置远程访问权限 一、Mysql8.0 设置远程访问权限 1. 管理员运行mysql命令窗口 2. 使用 root 用…

matlab安装及破解

一、如何下载 软件下载链接&#xff0c;密码&#xff1a;98ai 本来我想自己生成一个永久百度网盘链接的&#xff0c;但是&#xff1a; 等不住了&#xff0c;所以大家就用上面的链接吧。 二、下载花絮 百度网盘下载速度比上载速度还慢&#xff0c;我给充了个会员&#xff0c…

【1】:计算机图形学概述

从技术角度讲&#xff0c;什么是好的画面呢&#xff1f; 看这个画面是不是足够亮&#xff0c;也就是全局光照做的够好 什么是计算机图形学? 使用计算机合成和操作可视信息。 应用场景 Video Games 游戏 Movie 电影 Animation 动画 Design 设计&#xff1a;CAD等软件相关…

修复CentOS 6.6服务器YUM和RPM功能异常的技术实践20240523

修复CentOS 6.6服务器YUM和RPM功能异常的技术实践 引言 在复杂的生产环境中&#xff0c;服务器的稳定性至关重要。近期&#xff0c;我们遇到了一台CentOS 6.6服务器在执行yum update -y时被中断&#xff0c;导致YUM和RPM功能异常的问题。本文将详细介绍问题的诊断、解决过程以及…

java中变量名单独占用一个空间吗,为什么能直接使用变量名而不需要给java地址,变量名和地址之间有什么关系

在 Java 中&#xff0c;变量名不单独占用存储空间&#xff0c;但它们确实在内存中有对应的地址。为了理解这一点&#xff0c;我们需要深入了解变量名和内存地址之间的关系。 变量名与内存地址 变量名的作用: 在 Java 程序中&#xff0c;变量名是用于引用存储在内存中的数据的…

git显示提交次数

git shortlog 是一个特殊版本的 git log 命令&#xff0c;旨在创建发布公告。它将每个提交按作者分组&#xff0c;并显示每个提交消息的第一行。这是一种快速查看不同作者在项目中的贡献的方式。 以下是 git shortlog 的一些常用参数&#xff1a; -n 或 --numbered&#xff1…

Java多线程——Lambda表达式

λ希腊字母表中排序第十一位的字母&#xff0c;英语名称为Lambda&#xff1b; 避免匿名内部类定义过多&#xff1b; 其实质属于函数式编程的概念。 为什么要用Lambda表达式&#xff1f; 1. 避免匿名内部类定义过多&#xff1b; 2. 可以让你的代码看起来更简洁&#xff1b; …