Android 設定定時提醒,AlarmManager簡單使用
給app設定定時提醒的功能,典型的例子有鬧鐘,AlarmManager是Android系統級的服務,原理相當的簡單,當你設定一個時間,然後在到達時候後,系統觸發一個廣播,然後廣播通過PendingIntent來達到最終目的。
下面一步一步來說:
首先定義一個廣播RemindReceiver.java用來接收系統提醒:
RemindActivity是我們鬧鐘的展示介面。
public class RemindReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
ToastUtils.showMessage(context,"收到訊息" );
MediaPlayer.create(context, R.raw.remind).start();
Bundle bundle = intent.getExtras();
intent = new Intent(context, RemindActivity.class);
intent.putExtras(bundle);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}
然後再AndroidManifest.xml中註冊這個廣播:
<receiver android:name="xxx.xxx.RemindReceiver" >
新增一個提醒:
public class AlarmManageService {
public static AlarmManager alarmManager;
private static String TAG = "AlarmManageService";
public static void addAlarm(Context context, int requestCode,Bundle bundle,int minute){
Intent intent = new Intent(context,RemindReceiver.class);
intent.putExtras(bundle);
PendingIntent pendingIntent = PendingIntent.getBroadcast(context,requestCode,intent,0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND,60*minute);
//註冊新提醒
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
}
}
這裡Bundle 是用來攜帶資訊的,跟intent攜帶資訊一樣。
這裡使用Calendar 來設定一個將來的時間,為minute分鐘之後;
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND,60*minute);
AlarmManager有三個常用的方法:
(1):設定一次性鬧鐘:
AlarmManager.set(int type,long startTime,PendingIntent pendingIntent );
(2):該方法用於設定重複鬧鐘:
setRepeating(int type,long startTime,long intervalTime,PendingIntent pendingIntent );
(3):該方法也用於設定重複鬧鐘:
setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pendingIntent );
引數:int type: 鬧鐘的型別,常用的有5個值
分別是:
a: AlarmManager.ELAPSED_REALTIME 表示鬧鐘在手機睡眠狀態下不可用,該狀態下鬧鐘使用相對時間(相對於系統啟動開始),狀態值為3;
b:AlarmManager.ELAPSED_REALTIME_WAKEUP 表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘也使用相對時間,狀態值為2;
c:AlarmManager.RTC 表示鬧鐘在睡眠狀態下不可用,該狀態下鬧鐘使用絕對時間,即當前系統時間,狀態值為1;
d:AlarmManager.RTC_WAKEUP 表示鬧鐘在睡眠狀態下會喚醒系統並執行提示功能,該狀態下鬧鐘使用絕對時間,狀態值為0;
e:AlarmManager.POWER_OFF_WAKEUP 表示鬧鐘在手機關機狀態下也能正常進行提示功能,所以是5個狀態中用的最多的狀態之一,該狀態下鬧鐘也是用絕對時間,狀態值為4。
引數:long startTime 鬧鐘開始時間,以毫秒為單位;
引數:PendingIntent pendingIntent:設定鬧鐘的動作,可以是Activity,BroadcastReceiver 等。
引數:long intervalTime:在第二個方法中指,兩次鬧鐘的間隔時間,相等間隔;在第三個方法中也指兩次鬧鐘間隔時間,不相等時間;
現在就可以設定鬧鐘了:
alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP,calendar.getTimeInMillis(),pendingIntent);
最後就是使用了:
這裡bundle攜帶資訊,比如提示文字等等......,用於在RemindActivity介面展示
AlarmManageService.addAlarm(context,0,bundle,Integer.parseInt(result.getTxjg()));
鬧鐘的基本使用方法大致就是這樣了。