【问题标题】:Java/Android: passing Intent extras from BroadcastReceiver to ActivityJava/Android:将 Intent extra 从 BroadcastReceiver 传递给 Activity
【发布时间】:2014-06-10 18:46:24
【问题描述】:

更新: eclipse 和代码都没有引起这些问题。 Genymotion 做到了。

也许我的方法是完全错误的,因为似乎没有其他人有这个问题 - 如果是这样,我愿意尝试不同的方法而不是解决这个问题: 我有以下设置。

BroadcastReceiver 正在侦听应用程序的安装。每当安装一个新应用程序时,我都会使用基于普通 Intent 的 PendingIntent 创建一个通知

PendingIntent pIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);

在创建 PendingIntent 之前,我在普通 Intent 中添加了一些额外内容,当点击通知时,这些内容将传递给触发的 Activity。

notificationIntent.putExtra("AppLabel", appLabel); // the installed App
notificationIntent.putStringArrayListExtra("Group", group); // the corresponding group
notificationIntent.putStringArrayListExtra("List", list); // the corresponding list

现在可以正常工作并显示通知。调试我可以看到,当创建 pIntent 时,所有附加功能都已正确设置并通过。 但是,当我尝试阅读打开的 Activity 中的附加内容时,问题就开始了。我已经必须根据此处的答案构建一个解决方法来阅读附加内容:

Bundle bundle = getIntent().getExtras();
for (String key : bundle.keySet()) {
  Object value = bundle.get(key);
  if (key.equals("Group")) {
   group = (ArrayList<String>) value;
  } ... }

这也有一段时间,但现在我完全迷路了。出于某种原因,ArrayList extras 是空的 [] - appLabel 仍然设置正确。

现在真正的问题是,我不确定这是代码相关还是 Eclipse 问题。

我观察到,在一些部署之后,bundle.keySet() 返回了不同的键,然后我在 putExtra 调用中设置。我在搜索时也经常遇到 OutOfSync 错误。刷新在某些时候确实有帮助,关于键的名称,但值仍然丢失。

致所有读过这篇文章的人:非常感谢!现在 - 有人知道,这里发生了什么?有谁知道类似的日食问题?还是代码中有错误? 也欢迎任何有关不同设计的建议。如果我能排除一些错误来源,我会很高兴...... 提前致谢

更新:Manifest Infos:启动的通知活动定义如下:

<activity
 android:theme="@style/Theme.AppCompat.CompactMenu.Dialog"
 android:label="Notification Receiver"
 android:excludeFromRecents="true">
</activity>

然而,MainActivity 只有一个名称和一个标签。另外:

<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="19" />

我只是在两个点添加了一个 SystemOut:一个是 BCR 创建 Intent 时,另一个是 Activity 读取 Intent 时。

BroadcastReceiver.getExtras.keyset returns [a,b,c,d]

Activity.getExtras.keyset returns the keys [x,y,z]

在所有项目和所有工作区中搜索,x,y,z 无处可寻...它们在几天前的先前版本中使用过,所以似乎eclipse存储了一些无效的旧数据?

【问题讨论】:

  • 您的 Activity 的启动模式是否设置为 singleTop 或 singleTask,无论是在清单中还是带有意图标志?
  • @matiash 通知Activity定义如下: 活动>
  • 抱歉,我问是因为忘记实现onNewIntent() 是 singleTop 活动的常见错误。但看起来情况并非如此。
  • 我越来越确定这是一个日食问题。我只是想不出是什么原因造成的。重新安装 ADT 并更改工作区,我可以从 SVN 签出该应用程序,它工作了 2 个小时。与此同时,我又添加和更改了一些 Extras 并且繁荣,现在同样的问题又回来了。该活动获得不同的附加功能,然后在 BCR 中设置...

标签: android eclipse android-intent broadcastreceiver genymotion


【解决方案1】:

好吧,看起来所有的技术内容和所有的 outOfSync 都很糟糕,但最终并不相关。 它只是涵盖了一个非常微不足道的错误。可以在这里找到答案: Incorrect extras received with all intents but the first one

至少对于当前的实现,这看起来像是解决了问题——当然除了同步问题,但没有再次发生。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    • 1970-01-01
    • 2018-04-19
    相关资源
    最近更新 更多