安卓手機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.pswp.cn/bicheng/19064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19064.shtml
英文地址,請注明出處:http://en.pswp.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; …