【筆記】 AlarmManager 的教學與範例(By ChatGPT)


AlarmManager 使用方法

AlarmManager 是 Android 中的一個系統服務,它可以讓應用程序在特定時間或時間間隔內執行某些任務,即使該應用程序已經關閉或設備已經重新啟動也是如此。它可以用於定時更新數據,定時發送通知等功能。

AlarmManager 可以通過以下步驟使用:

  1. 創建一個 Intent 對象,該對象將指定要執行的任務。
  2. 創建一個 PendingIntent 對象,該對象將是 Intent 對象的包裝器,並且將被 AlarmManager 使用以在指定的時間執行任務。
  3. 使用 AlarmManager.set() 方法來設置要執行的任務和 PendingIntent 對象。

以下是一個簡單的示例代碼,該代碼演示了如何使用 AlarmManager 在每天的指定時間顯示通知:

// 設置要執行的 Intent 對象
Intent intent = new Intent(this, MyNotificationReceiver.class);

// 創建 PendingIntent 對象
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

// 獲取 AlarmManager 對象
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);

// 設置每天的指定時間
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 0);

// 設置 AlarmManager
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(),
        AlarmManager.INTERVAL_DAY, pendingIntent);

在這個示例中,我們創建了一個 Intent 對象,它將通知接收器類 MyNotificationReceiver 的執行。然後我們創建一個 PendingIntent 對象,使用 getBroadcast() 方法將 Intent 對象包裝。最後,我們使用 setRepeating() 方法來設置 AlarmManager,以便在每天的指定時間執行 PendingIntent 對象,該指定時間為上午 8 點。


以下是一個使用 AlarmManager 的 Jetpack Compose 小範例,該示例演示了如何設置每天的指定時間發送通知:

@Composable
fun SetAlarmScreen() {
    var selectedTime by remember { mutableStateOf(LocalTime.now()) }

    Column(
        modifier = Modifier.fillMaxSize(),
        horizontalAlignment = Alignment.CenterHorizontally,
        verticalArrangement = Arrangement.Center
    ) {
        TimePicker(
            modifier = Modifier.padding(bottom = 16.dp),
            value = selectedTime,
            onValueChange = { selectedTime = it },
            format = DateFormat.Clock24Hour
        )

        Button(
            onClick = {
                val alarmManager = LocalContext.current.getSystemService(Context.ALARM_SERVICE) as AlarmManager
                val intent = Intent(LocalContext.current, NotificationReceiver::class.java)
                val pendingIntent = PendingIntent.getBroadcast(LocalContext.current, 0, intent, 0)

                // 設置每天的指定時間
                val calendar = Calendar.getInstance()
                calendar.setTimeInMillis(System.currentTimeMillis())
                calendar.set(Calendar.HOUR_OF_DAY, selectedTime.hour)
                calendar.set(Calendar.MINUTE, selectedTime.minute)

                // 設置 AlarmManager
                alarmManager.setRepeating(
                    AlarmManager.RTC_WAKEUP,
                    calendar.timeInMillis,
                    AlarmManager.INTERVAL_DAY,
                    pendingIntent
                )
            }
        ) {
            Text("設置提醒")
        }
    }
}

在這個示例中,我們使用了 Jetpack Compose 中的 TimePicker,用戶可以通過該部件選擇每天的指定時間。當用戶單擊“設置提醒”按鈕時,我們創建了一個 Intent 對象,它將通知接收器類 NotificationReceiver 的執行。然後我們創建一個 PendingIntent 對象,使用 getBroadcast() 方法將 Intent 對象包裝。最後,我們使用 setRepeating() 方法來設置 AlarmManager,以便在每天的指定時間執行 PendingIntent 對象。


留言

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *