意图不将数据传递给 AlarmManager 的 BroadcastReceiver

Posted

技术标签:

【中文标题】意图不将数据传递给 AlarmManager 的 BroadcastReceiver【英文标题】:Intent not passing data to BroadcastReceiver of AlarmManager 【发布时间】:2021-11-15 10:12:26 【问题描述】:

我正在尝试通过 AlarmManager 的 PendingIntent 将数据传递给 BroadcastReceiver

在示例中,我尝试传递一个字符串和一个 Parcelable 对象,但是当我尝试在 BroadcastReceiver 中读取它们时,我得到了 null

活动

AlarmManager alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
Intent i = new Intent (this, ReminderBroadcast.class);
i.putExtra("ROUTINE", r);
i.putExtra("MESSAGE", "Example string");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this,1234,i,PendingIntent.FLAG_UPDATE_CURRENT);
alarmManager.set(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + 10000, pendingIntent);

广播接收器

public class ReminderBroadcast extends BroadcastReceiver 
    @Override
    public void onReceive(Context context, Intent intent) 
            Log.i(LOG_TAG,"notification code is "+ getResultCode());
            Log.i(LOG_TAG, "message is: "+ intent.getStringExtra("MESSAGE"));
            Log.i(LOG_TAG, "routine " + ((Routine)(intent.getParcelableExtra("ROUTINE"))).getRoutineName());
    
    

清单

<activity android:name=".SetupNotificationActivity" />
<receiver android:name=".support.ReminderBroadcast" 
          android:enabled="true" />

这让我发疯,因为在互联网上找到的所有解决方案都建议使用 PendingIntent.FLAG_UPDATE_CURRENT 来解决问题,但这似乎不起作用。

有什么建议吗? 谢谢

【问题讨论】:

您的代码在这里有效。仅用一根弦进行测试。 getResultCode(): 0. 你期待哪个代码? 不期望来自 getResultCode 的任何特定代码。我对我没有从 getExtra 收到任何字符串这一事实感到困扰,但感谢您的回答代码对您有效的事实使谜语变得更加困难:) 【参考方案1】:

对于可能遇到相同问题的任何人,我找到了解决方案。

该问题是由项目的 Parcelization 中的问题引起的,但该问题并未产生任何异常。

删除后一切正常

感谢支持

【讨论】:

以上是关于意图不将数据传递给 AlarmManager 的 BroadcastReceiver的主要内容,如果未能解决你的问题,请参考以下文章

http.get 不将数据传递给页面类变量

如何将数据传递给BottomSheetDialogFragment [重复]

vue js将数据传递给组件

通过变量与 Getter 将数据传递给组件之间的区别

将数据传递给 viewController

将数据传递给服务 - android?