【问题标题】:OnClick PendingIntent in widget sometimes doesn't work小部件中的 OnClick PendingIntent 有时不起作用
【发布时间】:2011-07-19 09:52:41
【问题描述】:

我有一个小部件和 4 个按钮。这些按钮实际上是其他应用程序的快捷方式。我已经使用以下代码为每个按钮设置了 onClick 挂起意图:

Intent i = context.getPackageManager().getLaunchIntentForPackage(s);                    
PendingIntent pi = PendingIntent.getActivity(context, 0, i, Intent.FLAG_ACTIVITY_NEW_TASK);
remoteViews.setOnClickPendingIntent(curIconId, pi);

通常它工作正常,但有时它什么也不做,并且在 logcat 中我看到带有消息“无法发送待处理意图”的 SendIntentException。

如果我更新小部件(即再次设置待处理的意图),它会再次正常工作。

关于为什么它有时会崩溃的任何想法?

谢谢

【问题讨论】:

    标签: android widget onclick android-pendingintent


    【解决方案1】:

    似乎每当您将 RemoteViews 发送到小部件时,您都需要完全指定小部件。如果您仅部分指定小部件,如果某些原因导致您的小部件被更新(例如屏幕旋转),您的小部件将仅使用最新的 RemoteViews 重新创建。

    这是向我指出这一点的链接http://www.androiddiscuss.com/1-android-discuss/95040.html

    【讨论】:

    • 这似乎与我的问题无关。我的代码更新了整个小部件,它每次都设置 PendingIntents。另外,我的主屏幕没有旋转。
    • 它可能无法解决原始帖子的问题,但这正是我遇到的问题。非常有用且很难找到答案,非常感谢!
    【解决方案2】:

    问题是我向远程视图发送了太多数据(在我的情况下,图标太多)。所以更新实际上失败了。您可以发送的内容有大小限制,不记得我在哪里看到的。

    在我的情况下,解决方案是使用资源 URL 而不是实际图像来更新图像。

    【讨论】:

      【解决方案3】:

      恐怕我无法回答您 - 我在一位同事(摩托罗拉)的手机上遇到了相同的行为,但在其他手机上却没有。

      可以指出,但是,您的 PendingIntent.getActivity() flags 参数是错误的:Intent.FLAG_ACTIVITY_NEW_TASK 需要继续 Intent igetActivity() 调用需要 FLAG_ONE_SHOTFLAG_NO_CREATEFLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENTIntent.FILL_IN_ 标志之一。

      我还可以提到,在我使用PendingIntent.FLAG_CANCEL_CURRENT 之前,我的点击有时会失败。这可能就是添加“唯一数据”有帮助的原因。

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题: 旋转后小部件不起作用。我的小部件中的问题是我已经覆盖了 onReceive 方法并在那里触摸视图以增加文本值。我解决了在 onUpdate 和 onReceive 中重复 setOnClickPendingIntent 的问题。

        【讨论】:

          猜你喜欢
          • 2014-11-02
          • 2013-01-12
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-20
          相关资源
          最近更新 更多