關於android中PendingIntent.getBroadcase的註冊廣播

使用語句java

[java] view plaincopyprint?PendingIntent intent= PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)測試

PendingIntent intent= PendingIntent.getBroadcast(Context context, int requestCode, Intent intent, int flags)this

得到PendingIntent,瀏覽了各種文章,大多數說了這種方法,可是基本上也就是止步於此,但是還有最重要的沒有談及,如何區別多個已註冊的PendingIntent呢,看了一下PendingIntent.getBroadcast的javadoc,第四個參數flags意爲標記,初步認爲flags是標識各個PendingIntent的,因而在測試中設置了個全局變量code

[java] view plaincopyprint?public static int currentIntent=0;get

public static int currentIntent=0; 而後用currentIntent++做爲第四個參數傳遞進去,測試,註冊了兩個監聽,等待時間的到來,bingo,竟然能夠了,目測已經能夠。但是繼續深刻時問題來了,我要傳遞參數怎樣?正解作法就是在第三個參數中設置it

[java] view plaincopyprint?intent.setExtra(String key,String value); //設置傳遞的參數ast

intent.setExtra(String key,String value); //設置傳遞的參數 而後在本身實現的Receiver裏用傳進來的參數Intent intent實現class

[java] view plaincopyprint?intent.getIntegerExtra(String key);變量

intent.getIntegerExtra(String key); 就能夠得到參數,能夠真正在實現的時候發現,在receiver裏始終取不到參數,再通過一番查找,發現要把PendingIntent.getBroadcast的第四個參數設置於PendingIntent.FLAG_UPDATE_CURRENT,設置後測試,果真能夠,但是這樣問題又出來了,又要如何區別註冊的intent呢?再次查看getBroadcast的javadoc,幾個參數都沒有說明如何區別要註冊的PendingIntent,反而看到第二個參數的說明很神奇,就是這個參數目前爲保留狀態,仍未用到,無奈中,繼續search各類說法,才發現,用requestCode來區別竟然是能夠的(但是爲何javadoc要說該參數未被使用呢?不解;估計用於區分PendingIntent的方法就是其中任意一個參數不一樣即可以區分了)代碼以下:request

設置監聽

[java] view plaincopyprint?Intent setAlertIntent=new Intent(this,AlertReceiver.class);
setAlertIntent.putExtra("try", "i'm just have a try");
PendingIntent pendingIntent=PendingIntent.getBroadcast(this, alarmCount++, setAlertIntent,PendingIntent.FLAG_UPDATE_CURRENT);

AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Intent setAlertIntent=new Intent(this,AlertReceiver.class);
	setAlertIntent.putExtra("try", "i'm just have a try");
	PendingIntent pendingIntent=PendingIntent.getBroadcast(this, alarmCount++, setAlertIntent,PendingIntent.FLAG_UPDATE_CURRENT);

	AlarmManager alarmManager=(AlarmManager)getSystemService(ALARM_SERVICE);
	alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);

Receiver中獲取傳遞的數據:

[java] view plaincopyprint?public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Bundle bundle= intent.getExtras();
if(bundle==null){
Toast.makeText(context,"nothing", Toast.LENGTH_LONG).show();
}else{
Set<String> set=bundle.keySet();
for(String item:set){
System.out.println(item);
System.out.println(".............");
}
Toast.makeText(context,bundle.getCharSequence("try"), Toast.LENGTH_LONG).show();
}

}

public void onReceive(Context context, Intent intent) {
	// TODO Auto-generated method stub
	Bundle bundle= intent.getExtras();
	if(bundle==null){
		Toast.makeText(context,"nothing", Toast.LENGTH_LONG).show();
	}else{
		Set<String> set=bundle.keySet();
		for(String item:set){
			System.out.println(item);
			System.out.println(".............");
		}
		Toast.makeText(context,bundle.getCharSequence("try"), Toast.LENGTH_LONG).show();
	}
	
}
相關文章
相關標籤/搜索