1. 程式人生 > >Android 設定定時提醒,AlarmManager簡單使用

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()));

鬧鐘的基本使用方法大致就是這樣了。