WidgetProvider在onReceive中找不到按钮点击发送的意图附加内容

时间:2011-02-16 22:23:30

标签: android widget android-intent broadcastreceiver

我正在尝试检测何时点击了widget按钮,但Intent方法中没有显示onReceive个额外内容。

每次点击都会调用

onReceive,但我的Intent个额外内容都不会显示。

我的代码如下:我只在更新时连接切换按钮,因此不确定这是否正确。即使我设置了这个,但没有任何附加功能显示,类别为null

onUpdate(上下文上下文等):

RemoteViews remoteViews = new RemoteViews(context.getPackageName(), 
                                R.layout.my_widget);

Intent buttonIntent = new Intent(context, MyWidgetProviderClass.class);
buttonIntent.setAction(ACTION_WIDGET_RECEIVER);
buttonIntent.putExtra("BUTTON_CLICKED", "buttonClick");
buttonIntent.putExtra("BUTTON",899);

PendingIntent muPendingIntent = PendingIntent.getBroadcast(context, 0, 
                                        buttonIntent, 
                                        PendingIntent.FLAG_CANCEL_CURRENT);
buttonIntent.addCategory("buttonclick");
remoteViews.setOnClickPendingIntent(R.id.ToggleImageButton, myPendingIntent);
appWidgetManager.updateAppWidget(appWidgetIds, remoteViews);

的onReceive():

intent.getIntExtra("BUTTON",-1);    ---> 1
intent.getCategories()   --- > null

3 个答案:

答案 0 :(得分:5)

尝试使用FLAG_UPDATE_CURRENT代替FLAG_CANCEL_CURRENT

此外,您的代码可能有拼写错误:您有muPendingIntent而不是myPendingIntent

另外,请不要将buttonclick用作类别。请命名它(例如,com.something.whatever.buttonclick),或删除它,因为我不确定为什么你需要它。

Here is a sample project演示了一个应用小部件,只需点击一下,就会触发更新,并带有额外的(用于提供应用小部件ID)。

答案 1 :(得分:1)

Android显然不喜欢重复使用名称ACTION_WIDGET_RECEIVER并删除这些参数。创建了另一个ACTION,仅用于切换按钮,在清单中注册,现在参数显示出来。

答案 2 :(得分:0)

我发现如果用于创建Pending意图的Intent已经包含任何额外内容,那么将忽略新意图的附加内容。例如,如果您按照Android文档中的示例来构建像这样的小部件

Intent toastIntent = new Intent(context, StackWidgetProvider.class);
toastIntent.setAction(StackWidgetProvider.TOAST_ACTION);
toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);
intent.setData(Uri.parse(intent.toUri(Intent.URI_INTENT_SCHEME)));
PendingIntent toastPendingIntent = PendingIntent.getBroadcast(context, 0, toastIntent,
PendingIntent.FLAG_UPDATE_CURRENT);
rv.setPendingIntentTemplate(R.id.stack_view, toastPendingIntent);

然后就行了

toastIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetIds[i]);

会阻止你的新意图的额外内容。我删除了那一行,我的新意图也奏效了。