你的 setExact() 需要 SCHEDULE_EXACT_ALARM 權限,因為 Android 12 (API 31) 之後,精確鬧鐘 (Exact Alarm) 需要特別授權。你可以用以下方式解決這個錯誤。
解決方案
1. 在 AndroidManifest.xml 內加入 SCHEDULE_EXACT_ALARM 權限
在 AndroidManifest.xml 檔案內加入:
🔹 這允許應用使用 精確鬧鐘,但 Android 12+ 仍需要使用者手動授權。
2. 確保使用者已授權 SCHEDULE_EXACT_ALARM
在 MainActivity 或 Application 啟動時檢查:
🔹 這段程式碼會引導使用者進入 系統設定頁面,手動允許應用程式使用精確鬧鐘。
3. 使用 setAndAllowWhileIdle() 來替代 (Android 6+ 可用)
如果你的鬧鐘不需要 極度精準的時間,可以改用:
🔹 這樣就 不需要 SCHEDULE_EXACT_ALARM 權限,但 Android 6+ 進入 Doze 模式時,可能有誤差。
結論
| 方法 | 需要權限 | 進入 Doze 模式後可用 | 適用版本 |
|---|---|---|---|
setExact() | ✅ SCHEDULE_EXACT_ALARM | ❌ 可能不執行 | Android 5+ |
setAndAllowWhileIdle() | ❌ 不需要權限 | ✅ 允許低耗電模式 | Android 6+ |
setExactAndAllowWhileIdle() | ✅ SCHEDULE_EXACT_ALARM | ✅ 允許低耗電模式 | Android 6+ |
👉 建議方案:
-
如果你 需要超精準的鬧鐘 → 使用
setExact()+SCHEDULE_EXACT_ALARM並提示使用者授權 -
如果 允許些微時間誤差 → 直接使用
setAndAllowWhileIdle(),不需要額外權限 🎯
沒有留言:
張貼留言