我注意到每当我将同一AppWidget的新实例添加到主屏幕时,使用所有的ID调用相应的AppWidgetProvider
onUpdate
方法appWidgetIds
中的实例。
reference明确指出:
EXTRA_APPWIDGET_IDS要更新的appWidgetIds。这可能是全部 为此提供程序创建的AppWidgets,或仅仅是一个子集。系统 尝试为尽可能少的AppWidget实例发送更新。
这种行为是故意的吗?
有没有办法强制onUpdate
仅使用适当的ID进行调用?
是否有办法区分受影响的实例与其他实例?
答案 0 :(得分:1)
创建小部件有两个选项: 第一个选项是不使用配置活动,然后所有小部件的行为都相似,并且它们都可以立即更新而不会有区别。 第二个是使用配置活动。在那里,您可以通过以下方式获取刚刚从调用的配置活动创建的窗口小部件ID:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
您可以在sqlite中保存此窗口小部件ID,例如,在配置步骤中定义的此窗口小部件上的其他信息。
所以对于你的问题:
这种行为是故意的吗?
我认为答案是''是'。因为在没有配置步骤的情况下创建的窗口小部件应该表现相似,并且onUpdate
按updatePeriodMillis
中的AppWidgetProviderInfo
属性定义的间隔调用onRecieve
。
有没有办法强制只使用适当的ID调用onUpdate?
没有。 from doc我可以知道这种选择不存在。
是否有办法区分受影响的实例与其他实例?
是的,您可以决定何时以及更新哪个确切的小部件。您可以通过在小部件提供程序类中使用onRecieve
来实现此目的: