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

时间:2011-07-19 09:52:41

标签: android widget onclick android-pendingintent

我有一个小部件和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,消息“无法发送待定意图”。

如果我更新小部件(即再次设置挂起的意图),它可以再次正常工作。

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

由于

4 个答案:

答案 0 :(得分:5)

似乎无论何时将RemoteViews发送到窗口小部件,您都需要完全指定窗口小部件。如果您仅部分指定窗口小部件,如果某些内容导致窗口小部件更新(例如屏幕旋转),则只能使用最新的RemoteView重新创建窗口小部件。

这是指向我http://www.androiddiscuss.com/1-android-discuss/95040.html

的链接

答案 1 :(得分:2)

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

我的解决方案是使用资源URL而不是实际图像更新图像。

答案 2 :(得分:1)

我担心我无法回答你 - 我在一部同事(摩托罗拉)的手机上得到了同样的行为,但其他手机却没有。

可以指出,您的PendingIntent.getActivity() flags参数错误:Intent.FLAG_ACTIVITY_NEW_TASK需要继续Intent igetActivity()调用需要FLAG_ONE_SHOTFLAG_NO_CREATEFLAG_CANCEL_CURRENTFLAG_UPDATE_CURRENT或其中一个Intent.FILL_IN_标记之一。

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

答案 3 :(得分:0)

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