android拾遺——AlarmManager的使用

AlarmManager的做用文檔中的解釋是:在特定的時刻爲咱們廣播一個指定的Intent。簡單的說就是咱們設定一個時間,而後在該時間到來時,AlarmManager爲咱們廣播一個咱們設定的Intent。 

對應AlarmManager更深層的瞭解能夠參考: 
http://www.programbbs.com/doc/5888.htm 
http://jinguo.iteye.com/blog/799778 

android提供了四種類型的鬧鐘: 
❑ ELAPSED_REALTIME 
在指定的延時事後,發送廣播,但不喚醒設備。 

❑ ELAPSED_REALTIME_WAKEUP 
在指定的演示後,發送廣播,並喚醒設備 
延時是要把系統啓動的時間SystemClock.elapsedRealtime()算進去的,具體用法看代碼。 

❑ RTC 
在指定的時刻,發送廣播,但不喚醒設備 

❑ RTC_WAKEUP 
在指定的時刻,發送廣播,並喚醒設備 


AlarmManager提供的方法: 
❑ void set(int type, long triggerAtTime, PendingIntent operation) 
設置一個鬧鐘 

❑ void setRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 
設置一個會重複的鬧鐘 

❑ void setInexactRepeating(int type, long triggerAtTime, long interval, PendingIntent operation) 
設置一個重複鬧鐘的不精確版本,它相對而言更節能(power-efficient)一些,由於系統可能會將幾個差很少的鬧鐘合併爲一個來執行,減小設備的喚醒次數。 
內置的幾個interval爲: 
INTERVAL_FIFTEEN_MINUTES 
INTERVAL_HALF_HOUR 
INTERVAL_HOUR 
INTERVAL_HALF_DAY 
INTERVAL_DAY 
若是你將其設爲DAY,那麼可能這一天中的全部鬧鐘都會被合併掉。 

❑ void cancel(PendingIntent operation) 
取消一個設置的鬧鐘 

❑ void setTimeZone(String timeZone) 
設置系統的默認時區。須要android.permission.SET_TIME_ZONE權限 

javascript

Java代碼    收藏代碼
// 首先建立Receiver
public class AlarmReceiver extends BroadcastReceiver {
	@Override
	public void onReceive(Context context, Intent intent) {
		Toast.makeText(context, "alarm", Toast.LENGTH_SHORT).show();
	}
}
Xml代碼   收藏代碼
// manifest中申明,並不須要intent-filter,咱們是明確指定發到哪一個receiver的
<receiver android:name="yuan.receivers.AlarmReceiver" />

PendingIntent:簡單的說就是在Intent上在加個指定的動做。Intent的話,咱們還須要在執行startActivity、startService或sendBroadcast才能使Intent有用。而PendingIntent的話就是將這個動做包含在內了,如PendingIntent.getBroadcast就包含了sendBroadcast的動做。 

5s後發送指定廣播 java

Java代碼    收藏代碼
 
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
int requestCode = 0;
PendingIntent pendIntent = PendingIntent.getBroadcast(getApplicationContext(),
		requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 5秒後發送廣播,只發送一次
int triggerAtTime = SystemClock.elapsedRealtime() + 5 * 1000;
alarmMgr.set(AlarmManager.ELAPSED_REALTIME, triggerAtTime, pendIntent);

5s後發送指定廣播,而後每一個10秒重複發送廣播 android

Java代碼    收藏代碼
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
int requestCode = 0;
PendingIntent pendIntent = PendingIntent.getBroadcast(getApplicationContext(),
		requestCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 5秒後發送廣播,而後每一個10秒重複發廣播。廣播都是直接發到AlarmReceiver的
int triggerAtTime = SystemClock.elapsedRealtime() + 5 * 1000;
int interval = 10 * 1000;
alarmMgr.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, interval, pendIntent);
Java代碼    收藏代碼
 
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(getApplicationContext(), AlarmReceiver.class);
PendingIntent pendIntent = PendingIntent.getBroadcast(getApplicationContext(),
		0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
// 與上面的intent匹配(filterEquals(intent))的鬧鐘會被取消
alarmMgr.cancel(pendIntent);
相關文章
相關標籤/搜索