在小部件中的OnClick PendingIntent有时不起作用

3

我有一个小部件和4个按钮。这些按钮实际上是指向其他应用程序的快捷方式。对于每个按钮,我使用以下代码设置了一个onClick pending intent:

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

通常情况下,它能正常工作,但有时它会无法执行任何操作,在logcat中我看到了一个带有消息“Cannot send pending intent”的SendIntentException。
如果我更新小部件(即重新设置待处理意图),它又能正常工作了。对于为什么有时会出现问题,您有什么想法吗?
谢谢。
4个回答

5
似乎每当您向小部件发送RemoteViews时,您需要完全指定小部件。如果您只部分指定小部件,如果某些原因导致小部件被更新(例如屏幕旋转),则您的小部件将仅使用最新的RemoteViews重新创建。
这是指出这一点的链接 http://www.androiddiscuss.com/1-android-discuss/95040.html

似乎与我的问题无关。我的代码更新整个小部件,每次都设置PendingIntents。此外,我的主屏幕不会旋转。 - Ran
它可能无法解决原帖的问题,但这正是我遇到的问题。非常有用且难以找到的答案,非常感谢! - Juanjo

2
问题在于我向远程视图发送了太多数据(在我的情况下,图标太多)。 因此,实际上更新失败了。 有一个可以发送的大小限制,但我不记得在哪里读到过。
在我的情况下,解决方案是使用资源URL更新图像,而不是实际的图像。

1

很抱歉,我无法回答你 - 我在一位同事(摩托罗拉)的手机上得到相同的行为,但在其他手机上却没有。

不过,我可以指出你的 PendingIntent.getActivity()flags 参数是错误的:那个 Intent.FLAG_ACTIVITY_NEW_TASK 需要放在 Intent i 上。这个 getActivity() 调用需要一个 FLAG_ONE_SHOTFLAG_NO_CREATEFLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT 或者一个 Intent.FILL_IN_ 标志。

我也可以提到,我的点击有时会失败,直到我使用了 PendingIntent.FLAG_CANCEL_CURRENT。这可能就是为什么添加“唯一数据”有所帮助的原因。


0

我遇到了同样的问题:小部件在旋转后无法工作。我的小部件问题在于,我覆盖了onReceive方法,并在其中触摸视图以增加文本值。我解决了这个问题,将setOnClickPendingIntent在onUpdate中复制一份,在onReceive中也进行了复制。


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