发送额外信息到广播接收器

4

我有一个Activity,运行以下代码(时间和间隔已定义):

Intent buzzIntent = new Intent(getBaseContext(), BuzzReceiver.class);
PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, 0);
AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
buzzIntent.putExtra("interval", interval);
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, time, interval * 60 * 1000, pendingIntent);

同时还需要一个 BroadcastReceiver,其 onReceive 函数如下所示:

@Override
public void onReceive(Context context, Intent intent) {
    try {
        int interval = intent.getIntExtra("interval", -1);
        <... more code ...>
    } catch (Exception e) {
        e.printStackTrace();
    }
}

但是intent.getIntExtra()返回-1(这不是Activity中interval的值,我已经检查过),所以出于某种原因,BroadcastReceiver没有获得存储在Activity中意图中的额外信息。我尝试了很多不同的方法,但似乎没有什么作用。我错过了什么吗?

我正在这里做类似的事情!!! https://dev59.com/G23Xa4cB1Zd3GeqPicf0#14612215 - Etienne Lawlor
3个回答

22

创建挂起意图时,请如下设置标志FILL_IN_DATA

PendingIntent pendingIntent = PendingIntent.getBroadcast(getBaseContext(), 0, buzzIntent, Intent.FILL_IN_DATA);

在这个更改后,您应该会在广播接收器中收到额外的内容。


1

你尝试过在将 buzzIntent 传递给 PendingIntent.getBroadcast() 之前调用 buzzIntent.putExtra() 吗?


0
尝试以下代码。
Bundle bundle = intent.getExtras();
int interval= bundle.getInt("interval", -1);

替代

int interval = intent.getIntExtra("interval", -1);

尝试过使用intent.getExtras(),但间隔仍为-1。getIntent()不存在。 - kevmo314
代码已更新,你确定没有从意图中发送空值吗? - ingsaurabh
是的,我确定。我可以运行intent.getExtras()然后从Activity中使用getInt()或者getIntExtra(),这样我就能得到正确的值。 - kevmo314

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接