Android AlarmManager
The Android AlarmManager
is a system service that allows you to schedule tasks to run at a specified time or after a specific interval. It’s commonly used for scheduling recurring tasks, notifications, and background services. Here’s how to use AlarmManager
in Android:
1. Import AlarmManager:
In your Java or Kotlin file, import the AlarmManager
class:
import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import java.util.Calendar;
2. Create an Intent for the Scheduled Task:
Create an Intent
that specifies the action to be performed when the alarm is triggered. This intent is used to start a service or broadcast a message.
Intent alarmIntent = new Intent(context, YourReceiver.class);
alarmIntent.setAction("YourCustomAction"); // Replace with your custom action
3. Create a PendingIntent:
Wrap the Intent
with a PendingIntent
. This pending intent represents the intent to be executed when the alarm fires.
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, alarmIntent, PendingIntent.FLAG_UPDATE_CURRENT);
4. Get the AlarmManager:
Retrieve the AlarmManager
system service:
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
5. Set the Alarm:
There are two primary ways to schedule alarms:
- One-Time Alarm: To schedule a one-time alarm at a specific time, use the
set()
method.
// Set the alarm to trigger at a specific time (e.g., 2:30 PM today)
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 14); // 2 PM
calendar.set(Calendar.MINUTE, 30);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
- Repeating Alarm: To schedule a repeating alarm at fixed intervals, use the
setRepeating()
method. For example, to trigger an alarm every 15 minutes:
// Set a repeating alarm to trigger every 15 minutes
long intervalMillis = 15 * 60 * 1000; // 15 minutes in milliseconds
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), intervalMillis, pendingIntent);
6. Create a BroadcastReceiver (Optional):
If you specified an action in your Intent
, you need to create a BroadcastReceiver
that handles the action.
public class YourReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
// Handle the action when the alarm is triggered
String action = intent.getAction();
if ("YourCustomAction".equals(action)) {
// Perform the desired task here
}
}
}
7. Register the BroadcastReceiver (Optional):
If you’re using a BroadcastReceiver
to handle the alarm’s action, you should register it in your manifest file:
<receiver android:name=".YourReceiver">
<intent-filter>
<action android:name="YourCustomAction" />
</intent-filter>
</receiver>
8. Permission (Optional):
If you schedule repeating alarms and target Android 9 (API level 28) or higher, you may need to request the FOREGROUND_SERVICE
permission in your manifest and provide a notification for the foreground service.
9. Testing:
Test your alarm scheduling by triggering it at the specified time or interval. You can use logging or notifications to verify that the alarm is working as expected.
Remember to handle alarms carefully to ensure they don’t negatively impact device performance or battery life.