2013-03-29 198 views
3

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

+0

我的猜測是文檔已過時,或者您描述的用途不是Android工程師爲該功能考慮的內容,但仍然有效。無論如何,我真誠懷疑他們所做的任何更改都會打破這種用例。您可以嘗試在http://b.android.com上提交報告,並查看Google的某個人對此有何評論 –

+0

@RaghavSood該文檔不太可能過時(最後更新於3月21日,看起來像)但是,我不太關注,這主要是學術上的好奇心。 :)我可能會提交一份報告,謝謝(雖然以我的經驗他們沒有完全響應)。 – Catherine

+2

它們並不總是更新每一個單一的方法描述:P文檔經常以零散的方式過時。 –

回答

1

requestCode是最肯定的使用,已經很長一段時間。 Android文檔已過時,並且已經有相當長的一段時間了。檢查AOSP來源以確認是否需要。

相關問題