我有一个小部件和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,消息“无法发送待定意图”。
如果我更新小部件(即再次设置挂起的意图),它可以再次正常工作。
有时为什么会崩溃的任何想法?
由于
答案 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 i
。 getActivity()
调用需要FLAG_ONE_SHOT
,FLAG_NO_CREATE
,FLAG_CANCEL_CURRENT
,FLAG_UPDATE_CURRENT
或其中一个Intent.FILL_IN_
标记之一。
我还可以提到,在我使用PendingIntent.FLAG_CANCEL_CURRENT
之前,我的点击有时会失败。这可能是添加“唯一数据”有用的原因。
答案 3 :(得分:0)
我有同样的问题: 旋转后窗口小部件不起作用。我的小部件中的问题是我已经覆盖了 onReceive方法和触摸视图以增加文本值。我在onReceive中解决了重复setOnClickPendingIntent在onUpdate中的问题。