3

文档PendingIntent指出,在 中PendingIntent.getBroadcast()requestCode参数“当前未使用”。但是,我做了一些非常详尽的测试,并且设置不同requestCode的 s 很明显地改变了程序的行为(并且设置不同requestCode的 s 似乎是区分警报意图的一种普遍接受的方法)。

requestCode明显地使用了一个有被“修复”风险的错误吗?或者我可以继续使用它来区分我的 PendingIntents 吗?

一些背景:

onCreate我在主 Activity 中使用以下代码设置了一个测试应用程序:

@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

4

1 回答 1

1

requestCode是最肯定使用的,并且已经使用了相当长的一段时间。Android 文档已经过时并且已经存在了很长一段时间。检查 AOSP 源以确认是否需要。

于 2013-03-29T08:14:02.273 回答