向警报管理器广播接收器发送数据

16

我在这里没有理解清楚,希望有人能够帮助我。我正在使用以下方式设置闹钟:

    AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);

    Intent broadcast_intent = new Intent(this, AlarmBroadcastReceiver.class);
    PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,  broadcast_intent, 0);

    broadcast_intent.putExtra("test", "ValueReceived"); //data to pass
    Date date = someVariable.getDateTime();


    long triggerAtTime = date.getTime();

    alarmManager.set(AlarmManager.RTC_WAKEUP, triggerAtTime, pendingIntent);

使用以下代码实现广播接收器:

public class AlarmBroadcastReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {

        Toast.makeText(context, "Alarm has been received "+intent.getStringExtra("test"), Toast.LENGTH_LONG).show();

    }

}

然而,意图明显是“空的”。我看到getStringExtra返回null值。因此,数据未传递给广播接收器。我做错了什么?我该如何传递数据。

非常感谢。


请参阅此帖子 https://dev59.com/4HE85IYBdhLWcg3wUBkZ - ρяσѕρєя K
看一下 @Theus 的回答,我认为那是你需要的。 - lemoncodes
1个回答

32

在将Intent传递给PendingIntent之前,你需要先向Intent中添加额外的内容:

Intent broadcast_intent = new Intent(this, AlarmBroadcastReceiver.class);
broadcast_intent.putExtra("test", "ValueReceived"); //data to pass

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0,  broadcast_intent, 0);

1
我认为这个可能会对你有所帮助,在将其传递给待定意图之前,首先分配额外的内容。 - lemoncodes
太棒了,它能正常工作,哇!我不知道顺序很重要,因为它是同一个对象。谢谢你。 - Snake

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