【问题标题】:Sending extras to BroadcastReceiver向 BroadcastReceiver 发送附加信息
【发布时间】:2011-03-07 05:27:45
【问题描述】:

我有一个运行以下代码的活动(定义了时间和间隔):

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);

还有一个具有以下 onReceive 的 BroadcastReceiver:

@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 中的间隔值,我检查过),所以由于某种原因,BroadcastReceiver 没有获得我存储到意图中的额外内容活动。

我尝试了很多不同的方法,但似乎没有任何效果。我在这里遗漏了什么吗?

【问题讨论】:

标签: android broadcastreceiver android-intent android-pendingintent


【解决方案1】:

在创建待定意图时设置标志FILL_IN_DATA,如下所示:

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

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

【讨论】:

  • 你救了我的f国王 :)
【解决方案2】:

你有没有试过打电话给buzzIntent.putExtra()你将buzzIntent传递给PendingIntent.getBroadcast()

【讨论】:

    【解决方案3】:

    试试下面的代码

    Bundle bundle = intent.getExtras();
    int interval= bundle.getInt("interval", -1);
    

    而不是

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

    【讨论】:

    • 试过了,除了使用intent.getExtras(),但interval仍然是-1。 getIntent() 不存在。
    • 更新了代码你确定你没有从意图发送空值
    • 是的,我确定。我可以从 Activity 运行 intent.getExtras() 然后 getInt() 甚至 getIntExtra() ,我得到正确的值。
    猜你喜欢
    • 2019-11-19
    • 2015-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多