Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> 在Android中使用AlarmManager

在Android中使用AlarmManager

編輯:關於Android編程

AlarmManager是Android中的一種系統級別的提醒服務,它會為我們在特定的時刻廣播一個指定的Intent。而使用Intent的時候,我們還需要它執行一個動作,如startActivity,startService,startBroadcast,才能使Intent有用。通常我們使用PendingIntent,它可以理解為對Intent的封裝,包含了指定的動作。

我們可以通過PendingIntent的靜態方法得到一個PendingIntent對象,如下:

PendingIntent pi = PendingIntent.getBroadcast(context, 0, intent, 0);

使用PendingIntent的getBroadcast (Context context, int requestCode, Intent intent, int flags)方法可以得到一個發送廣播動作的PendingIntent對象。其中getBroadcast的第4個參數可以為以下4個常量或其他支持使用Intent.fillIn()來控制它的變量:

FLAG_CANCEL_CURRENT:如果描述的PendingIntent對象已經存在時,會先取消當前的PendingIntent對象再生成新的。

FLAG_NO_CREATE:如果描述的PendingIntent對象不存在,它會返回null而不是去創建它。

FLAG_ONE_SHOT:創建的PendingIntent對象只使用一次。

FLAG_UPDATE_CURRENT:如果描述的PendingIntent對象存在,則保留它,並將新的PendingIntent對象的數據替換進去。


接下來看AlarmManager,我們通過以下代碼來取得AlarmManager對象。

 AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
AlarmManager對象中常用的方法有三個:

1、set(int type,long startTime,PendingIntent pi),用於設置一次鬧鐘。

2、setRepeating(int type,long startTime,long intervalTime,PendingIntent pi),用於設置重復鬧鐘。

3、setInexactRepeating(int type,long startTime,long intervalTime,PendingIntent pi),同樣是用於設置重復鬧鐘,但是它是不准確的,相對於第二個方法,也更加節能。因為系統會將差不多的鬧鐘進行合並,以避免在不必要地喚醒設備。

在上面的三個方法中,type為鬧鐘的類型,它可以使用以下四個常量:

ELAPSED_REALTIME:鬧鐘在睡眠狀態下不可用,使用的是相對系統啟動時間。

ELAPSED_REALTIME_WAKEUP:鬧鐘在睡眠狀態下可用,使用的是相對系統啟動時間。

RTC:鬧鐘在睡眠狀態下不可用,使用的是真實時間。

RTC_WAKEUP:鬧鐘在睡眠狀態下可用,使用的是真實時間。

startTime為鬧鐘開始時間。

intervalTime為鬧鐘間隔,在第三個方法中,內置的幾個變量如下:

INTERVAL_FIFTEEN_MINUTES
INTERVAL_HALF_HOUR
INTERVAL_HOUR
INTERVAL_HALF_DAY
INTERVAL_DAY


如果我們設定的是發送廣播的鬧鐘,我們還需要寫一個廣播接收器,並對其進行注冊,它才會在鬧鐘開始的時候接收到廣播。

如果要設定啟動Activity或Service的鬧鐘,則在創建PendingIntent的時候,首先Intent對象需設定指定的Activity或Service的class對象,然後對應的調用PendingIntent.getActivity()或PendingIntent.getService()方法。

下面以設置發送廣播的鬧鐘代碼實例來看AlarmManager的使用:

首先設定一個鬧鐘:

        Intent intent = new Intent("pw.msdx.ACTION_SEND");
        PendingIntent sendIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
        AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
        am.cancel(sendIntent);
        am.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis(), 60 * 10 * 1000, sendIntent);
在上面的例子中,就會從當前的時間開始,每10分鐘啟動一次鬧鐘提醒。需要注意的是,如果設定的開始時間已經過去,它會馬上啟動鬧鐘提醒。

接下來需要寫一個廣播接收器來接收這個廣播並進行處理。

代碼如下:

public class SendReceiver extends BroadcastReceiver {
    public final static String ACTION_SEND = "pw.msdx.ACTION_SEND";

    @Override
    public void onReceive(final Context context, Intent intent) {
        String action = intent.getAction();
        if (ACTION_SEND.equals(action)) {
            Log.i("SendReceiver", "send a message");
        }
    }
}

然後我們還需要注冊這個廣播接收器,這樣它才能接收到廣播。這裡采用的是靜態注冊的方法,在AndroidManifest裡進行注冊:

        
            
                
            
        





  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved