documentation for PendingIntent
指出在PendingIntent.getBroadcast()
中,requestCode
參數爲「當前未使用」。但是,我做了一些非常詳盡的測試,並且設置不同的requestCode
很明顯改變了程序的行爲(並且設置不同的requestCode
似乎是用於區分報警內容的普遍接受的方法)。爲什麼說PendingIntent.getBroadcast()中的requestCode沒有被使用?
requestCode
很明顯是否使用了一個可能被「固定」的錯誤?還是我可以繼續使用它來區分我的PendingIntents?
一些背景資料:
我在主體活動設置了下面的代碼測試程序爲onCreate
:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AlarmManager alarmMgr = (AlarmManager) getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("text", "text one");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Calendar time = Calendar.getInstance();
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 1);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
intent = new Intent(this, MyAlarmReceiver.class);
intent.putExtra("text", "text two");
pendingIntent = PendingIntent.getBroadcast(this, 1, intent, PendingIntent.FLAG_UPDATE_CURRENT);
time.setTimeInMillis(System.currentTimeMillis());
time.add(Calendar.SECOND, 10);
alarmMgr.set(AlarmManager.RTC_WAKEUP, time.getTimeInMillis(), pendingIntent);
}
以及一個非常簡單的AlarmReceiver:
public class MyAlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Toast.makeText(context, intent.getStringExtra("text"), Toast.LENGTH_SHORT).show();
}
}
然後我嘗試爲PendingIntents設置不同的標誌和requestCodes。這些結果如下:
https://docs.google.com/spreadsheet/ccc?key=0AnqelXkzmAL0dDNYeVEyekJyRkV1VDZNVVIyQTJkdmc#gid=0
我的猜測是文檔已過時,或者您描述的用途不是Android工程師爲該功能考慮的內容,但仍然有效。無論如何,我真誠懷疑他們所做的任何更改都會打破這種用例。您可以嘗試在http://b.android.com上提交報告,並查看Google的某個人對此有何評論 –
@RaghavSood該文檔不太可能過時(最後更新於3月21日,看起來像)但是,我不太關注,這主要是學術上的好奇心。 :)我可能會提交一份報告,謝謝(雖然以我的經驗他們沒有完全響應)。 – Catherine
它們並不總是更新每一個單一的方法描述:P文檔經常以零散的方式過時。 –