java.lang.SecurityException android.permission.SCHEDULE_EXACT_ALARM 錯誤

造成條件:

1. Android targetSdk 設定到 31 以上

2. 使用 Android 12 以上機型

3. 使用到 AlarmManager

錯誤截圖:

造成原因 : 

缺少 Permission

AndroidManifest.cml 補上 Permission

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

google 說明

連結

設定完後,可以到 APP 設定內查看 Alarms & reminders

Default 是開啟的

如何處理:

1. 取得 AlarmManager

AlarmManager alarmManager =                                   (AlarmManager)getSystemService(Context.ALARM_SERVICE);
boolean isPermissionAgreed = alarmManager.canScheduleExactAlarms();

2. 檢查權限

@RequiresApi(api = Build.VERSION_CODES.S)

public void checkPermission() {

AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);

boolean isPermissionAgreed = alarmManager.canScheduleExactAlarms();       

}

3. 使用者可能手動關閉,加入 if-else 但斷是否繼續執行 setAlarm 動作

if-else 判斷使用者是否將權限關閉,避免操作 Crash

後記

如果這篇文章對於你有幫助,可以幫忙分享給更多的人.文章內容如果有誤,可以在下方留言告知.本網站主要提供程式, 玩具相關資訊,可以訂閱獲得最即時的資訊.

留言

熱門文章

TourCard 開通全紀錄 台胞證 支付寶

[ 教學 ] 如何使用 Sourcetree 對 Github 進行版本控制 #Mac OS 版本控制