AlarmManager:在特定時(shí)刻為我們廣播發(fā)送一個(gè)指定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í)行動(dòng)作,比如發(fā)送廣播、給出提示等;
* PendingIntent.getService(Context c, int i, Intent intentm int j) 通過啟動(dòng)服務(wù)來實(shí)現(xiàn)鬧鐘提示
* PendingIntent.getBroadcase(...) 通過啟動(dòng)廣播來實(shí)現(xiàn)
* PendingIntent.getActivity(...) 通過啟動(dòng)Activity來實(shí)現(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è)置一次性鬧鐘
* 第一個(gè)參數(shù):鬧鐘類型
* 第二個(gè)參數(shù):鬧鐘執(zhí)行的時(shí)間
* 第三個(gè)參數(shù):鬧鐘響應(yīng)動(dò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í)間
* 參數(shù)3:鬧鐘兩次執(zhí)行的時(shí)間間隔
* 參數(shù)4:鬧鐘響應(yīng)動(dò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ù)鬧鐘 間隔時(shí)間不固定,更節(jié)能,系統(tǒng)可能將幾個(gè)差不多的鬧鐘合并為一個(gè)執(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: 鬧鐘在手機(jī)睡眠狀態(tài)下不可用,該狀態(tài)下鬧鐘使用相對時(shí)間(相對于系統(tǒng)啟動(dòng)開始, SystemClock.elapsedRealtime()),狀態(tài)值為3;
* AlarmManager.ELAPSED_REALTIME_WAKEUP: 鬧鐘在手機(jī)睡眠狀態(tài)下回喚醒系統(tǒng)并執(zhí)行提示功能,該狀態(tài)下鬧鐘也使用相對時(shí)間,狀態(tài)值為2;
* AlarmManager.RTC: 鬧鐘在睡眠狀態(tài)下不可用,改狀態(tài)下鬧鐘使用絕對時(shí)間,即當(dāng)前系統(tǒng)時(shí)間,狀態(tài)值為1;
* AlarmManager.RTC_WAKEUP: 鬧鐘在睡眠狀態(tài)下回喚醒系統(tǒng)并執(zhí)行提示功能,使用絕對時(shí)間,狀態(tài)值為0;
* AlarmManager.POWER_OFF_WAKEUP: 鬧鐘在手機(jī)關(guān)機(jī)狀態(tài)下也能正常進(jìn)行提示功能,使用最多,使用絕對時(shí)間(System.currentTimeMillis()),狀態(tài)值為4,受SDK版本影響。
*/
}
public static void actionStart(Context context) {
Intent intent = new Intent(context, AlarmActivity.class);
context.startActivity(intent);
}
}
</code></pre>