我正在尝试检测何时点击了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
答案 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]);
会阻止你的新意图的额外内容。我删除了那一行,我的新意图也奏效了。