AlarmManager:在特定時刻為我們廣播發(fā)送一個指定intent墓怀。
如何使用:
<pre><code>
public class AlarmActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.alarm_act);
initAlarm();
}
private void initAlarm() {
AlarmManager alarmManager = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
int requestCode = 0;
/**
* 綁定了鬧鐘的執(zhí)行動作,比如發(fā)送廣播、給出提示等凫岖;
* PendingIntent.getService(Context c, int i, Intent intentm int j) 通過啟動服務(wù)來實現(xiàn)鬧鐘提示
* PendingIntent.getBroadcase(...) 通過啟動廣播來實現(xiàn)
* PendingIntent.getActivity(...) 通過啟動Activity來實現(xiàn)
*/
PendingIntent pendingIntent = PendingIntent.getBroadcast(getApplicationContext(),
requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// PendingIntent pendingIntent = PendingIntent.getActivity(getApplicationContext(),
// requestCode, new Intent(this, ViewAnimationActivity.class), PendingIntent.FLAG_UPDATE_CURRENT);
// 5秒后發(fā)送廣播
long triggerAtTime = SystemClock.elapsedRealtime() + 5 * 1000;
/**
* set(int type,long startTime晒哄,PendingIntent pi)购啄;
* 設(shè)置一次性鬧鐘
* 第一個參數(shù):鬧鐘類型
* 第二個參數(shù):鬧鐘執(zhí)行的時間
* 第三個參數(shù):鬧鐘響應(yīng)動作
*
* 5秒后發(fā)送廣播
*/
alarmManager.set(AlarmManager.ELAPSED_REALTIME, triggerAtTime, pendingIntent);
/**
* setRepeating(int type襟企,long startTime,long intervalTime狮含,PendingIntent pi)顽悼;
* 設(shè)置重復(fù)鬧鐘
* 參數(shù)1:鬧鐘類型
* 參數(shù)2:鬧鐘首次執(zhí)行時間
* 參數(shù)3:鬧鐘兩次執(zhí)行的時間間隔
* 參數(shù)4:鬧鐘響應(yīng)動作
*
* 5秒后發(fā)送廣播,然后每隔10秒重復(fù)發(fā)送
*/
//alarmManager.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP,
//triggerAtTime, 10 * 1000, pendingIntent);
/**
* setInexactRepeating(int type几迄,long startTime蔚龙,long intervalTime,PendingIntent pi)映胁;
* 同上:設(shè)置重復(fù)鬧鐘 間隔時間不固定木羹,更節(jié)能,系統(tǒng)可能將幾個差不多的鬧鐘合并為一個執(zhí)行,減少喚醒次數(shù)
* 參數(shù)3:intervalTime
* INTERVAL_FIFTEEN_MINUTES
* INTERVAL_HALF_HOUR
* INTERVAL_HOUR
* INTERVAL_HALF_DAY
* INTERVAL_DAY
*/
//alarmManager.setInexactRepeating();
/**
* 鬧鐘取消
*/
//alarmManager.cancel(pendingIntent);
/**
* 鬧鐘類型:
* AlarmManager.ELAPSED_REALTIME: 鬧鐘在手機睡眠狀態(tài)下不可用屿愚,該狀態(tài)下鬧鐘使用相對時間(相對于系統(tǒng)啟動開始, SystemClock.elapsedRealtime())汇跨,狀態(tài)值為3务荆;
* AlarmManager.ELAPSED_REALTIME_WAKEUP: 鬧鐘在手機睡眠狀態(tài)下回喚醒系統(tǒng)并執(zhí)行提示功能妆距,該狀態(tài)下鬧鐘也使用相對時間穷遂,狀態(tài)值為2;
* AlarmManager.RTC: 鬧鐘在睡眠狀態(tài)下不可用娱据,改狀態(tài)下鬧鐘使用絕對時間蚪黑,即當前系統(tǒng)時間,狀態(tài)值為1中剩;
* AlarmManager.RTC_WAKEUP: 鬧鐘在睡眠狀態(tài)下回喚醒系統(tǒng)并執(zhí)行提示功能忌穿,使用絕對時間,狀態(tài)值為0结啼;
* AlarmManager.POWER_OFF_WAKEUP: 鬧鐘在手機關(guān)機狀態(tài)下也能正常進行提示功能掠剑,使用最多,使用絕對時間(System.currentTimeMillis())郊愧,狀態(tài)值為4朴译,受SDK版本影響。
*/
}
public static void actionStart(Context context) {
Intent intent = new Intent(context, AlarmActivity.class);
context.startActivity(intent);
}
}
</code></pre>