我有一个显示随机数的简单小部件。点击它时会刷新并显示另一个随机数。这是AppWidgetProvider的onUpdate方法的代码
public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) {
super.onUpdate(context, appWidgetManager, appWidgetIds);
for (int widgetId : appWidgetIds) {
int number = new Random().nextInt(100);
RemoteViews remoteViews = new RemoteViews(context.getPackageName(), R.layout.widget_exchange);
remoteViews.setTextViewText(R.id.widget_textview, String.valueOf(number));
// Register an onClickListener
Intent intent = new Intent(context, ExchangeWidgetProvider.class);
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {widgetId} );
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.widget_textview, pendingIntent);
appWidgetManager.updateAppWidget(widgetId, remoteViews);
}
}
这样,小部件在放置时会进行第一次更新,但在单击时不会再次更新。如果我只是从:
更改待处理的意图行PendingIntent pendingIntent = PendingIntent.getBroadcast(context, widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
到
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, widgetId, intent, 0);
即。唯一改变的是现在的最后一个参数' 0'
它现在按预期工作,点击它会使它显示一个新的随机数。
为什么会这样,但是当它有FLAG_UPDATE_CURRENT标志时它不起作用?
答案 0 :(得分:0)
请注意PendingIntent中的文档:
/**
* Flag indicating that if the described PendingIntent already exists,
* then keep it but replace its extra data with what is in this new
* Intent. For use with {@link #getActivity}, {@link #getBroadcast}, and
* {@link #getService}. <p>This can be used if you are creating intents where only the
* extras change, and don't care that any entities that received your
* previous PendingIntent will be able to launch it with your new
* extras even if they are not explicitly given to it.
*/
public static final int FLAG_UPDATE_CURRENT = 1<<27;
这意味着设置FLAG_UPDATE_CURRENT
并不意味着更新广播侦听器,而是更新挂起的意图(如果存在)。在您的情况下,它不存在,因此将被忽略。