Flutter + AlarmManager = ⏰
Flutter + AlarmManager = ⏰
原文 https://medium.com/flutter-community/flutter-alarmmanager-f184671240cb
前言
如果您是一名 Android 開發人員,當您希望將應用程式安排在將來的特定時間執行時,可以使用 AlarmManager。如果你是一個 iOS 開發者,這種型別的元件並不存在。
如果你是一個 Flutter 開發者,你會怎麼做?
像大多數與 Flutter 相關的事情一樣,當您想要使用特定於平臺的元件時,您需要公開它的功能。
AlarmManager 也不例外。
本文將介紹 Android AlarmManager Plus 包,並展示如何在應用程式中使用它。
準備好設鬧鐘了嗎?
正文
Setup 設定
- 開啟 pubspec.yaml 檔案並新增以下內容:
yaml
dependencies:
android_alarm_manager_plus: ^2.0.6
Something 免責宣告 → 撰寫本文時,最新版本是 2.0.6
- 執行
pub get
下載依賴項
我們將使用您在 Android Studio 中建立 Flutter 專案時獲得的普通專案(減去所有計數器邏輯)。
- 開啟 AndroidManifest.xml 檔案並新增以下許可權:
```xml
- 在您的應用程式標籤中,新增以下內容:
xml
<service
android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmService"
android:permission="android.permission.BIND_JOB_SERVICE"
android:exported="false"/>
<receiver
android:name="dev.fluttercommunity.plus.androidalarmmanager.AlarmBroadcastReceiver"
android:exported="false"/>
<receiver
android:name="dev.fluttercommunity.plus.androidalarmmanager.RebootBroadcastReceiver"
android:enabled="false"
android:exported="false">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
最後,你的 AndroidManifest 檔案應該是這樣的:
```xml
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<!-- For apps with targetSDK=31 (Android 12) -->
<uses-permission android:name="android.permission.SCHEDULE_EXACT_ALARM"/>
AndroidManifest.xml
Alarm Bells Are Ringing
該包公開了一個 AndroidAlarmManager 物件,該物件具有以下(相關)方法:
- oneShot : 一次性觸發警報
- oneShotAt : 在特定日期觸發一次性警報
- periodic : 在規定的時間間隔內觸發警報
讓我們詳細討論每個選項。
OneShot 方法接受以下引數:
dart
static Future<bool> oneShot(
Duration delay,
int id,
Function callback, {
bool alarmClock = false,
bool allowWhileIdle = false,
bool exact = false,
bool wakeup = false,
bool rescheduleOnReboot = false,
})
oneShot method
前三個引數(延遲、 id 和 callback)是不言自明的,因此我們將關注其餘的。
- AlarmClock - 一個標誌,指示計時器是否將與 Android 的 AlarmManagerCompact.setAlarmClock 一起設定
- AllowWhileIdle - 一個標誌,指示計時器是否將用 AlarmManagerCompat.setExactAndAllowWhildle 或 AlarmManagerCompat.setAndAllowWhileIdle 設定
- Sec - 指示是否使用 AlarmManagerCompat.setExact 設定計時器的標誌
- wakeup - 一個標誌,表明如果裝置將被喚醒時,警報將被觸發
- rescheduleOnReboot - 一個標誌,表明如果警報將持續之間的裝置重新啟動
OneShotAt 方法與 oneShot 方法非常相似,只有一個關鍵字不同。第一個引數是一個 DateTime 物件,該物件設定警報觸發的時間,而不是持續時間型別的延遲。
dart
static Future<bool> oneShotAt(
DateTime time,
int id,
Function callback, {
bool alarmClock = false,
bool allowWhileIdle = false,
bool exact = false,
bool wakeup = false,
bool rescheduleOnReboot = false,
})
periodic 方法接受下引數:
dart
static Future<bool> periodic(
Duration duration,
int id,
Function callback, {
DateTime? startAt,
bool allowWhileIdle = false,
bool exact = false,
bool wakeup = false,
bool rescheduleOnReboot = false,
})
正如您所看到的,這個方法在它接受的引數中也是類似的。這裡最重要的論點是:
- StartAt : 指示第一次觸發警報的時間
- duration : 負責每隔一段時間重新觸發警報。
記得設定鬧鐘
關於 Alarm Manager Plus 包需要注意的一點是,它使用隔離程式來執行警報。隔離類似於執行緒,只是它們不共享記憶體。因此,它們與資訊交流。
因此,您必須將警報處理程式(callback)宣告為靜態的,以便可以訪問它們。
你可以在這裡瞭解更多關於 isolates 的資訊。
程式碼
https://github.com/ducafecat/MediumArticles
結束語
如果本文對你有幫助,請轉發讓更多的朋友閱讀。
也許這個操作只要你 3 秒鐘,對我來說是一個激勵,感謝。
祝你有一個美好的一天~
© 貓哥
-
微信 ducafecat
-
https://wiki.ducafecat.tech
-
https://video.ducafecat.tech
- Flutter 中使用 OpenAI GPT-3 進行語義化處理
- Flutter 構建設計系統
- Flutter ー Authentication 認證
- Flutter 離線資料方案 Flutter_Data 包
- 基於 Hive 的 Flutter 文件型別儲存
- Flutter AlarmManager = ⏰
- Flutter 8 個優秀動畫 Packages
- Flutter 建立自己的對話方塊,不使用任何包!
- 在 Flutter App 中編寫自定義平臺特定程式碼[Method Channel]
- Flutter 最有用的 5 個優秀的依賴包
- Neumorphism 元件 ーー Dart extension 擴充套件
- 用抽象工廠方法構建 Flutter 主題
- Dart 語言的7個很酷的特點
- 17 個提高效能的 Flutter 最佳實踐
- Flutter 應用程式建立一個擴充套件面板列表
- 在 Flutter 使用 GetX 對話方塊
- flutter 互動式使用者指導,以及如何在佈局中創造一個洞
- Flutter開源專案 - appFlowy 真的是 Notion 的替代品? 一週暴漲 star 9k 多!
- 桌面 Flutter 應用程式
- Flutter 2020 開源專案推薦 第一彈