创建小部件有两个选项:第一个选项是不使用配置活动,然后所有小部件的行为相似,它们都可以立即更新而无需区分。第二个是使用配置活动。在那里,您可以通过以下方式获取刚刚从调用的配置活动创建的小部件 ID:
Intent intent = getIntent();
Bundle extras = intent.getExtras();
int appWidgetId = extras.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID, AppWidgetManager.INVALID_APPWIDGET_ID);
您可以将这个小部件 ID 保存在 sqlite 中,例如在配置步骤时定义的关于这个小部件的其他信息。
所以对于你的问题:
这种行为是故意的吗?
我认为答案是 - '是的'。onUpdate
因为在没有配置步骤的情况下创建的小部件应该表现相似,并且updatePeriodMillis
在AppWidgetProviderInfo
.
有没有办法强制仅使用适当的 id 调用 onUpdate?
不,从文档中我可以了解到这样的选项不存在。
有没有办法将受影响的实例与其他实例区分开来?
是的,您可以决定何时更新哪个确切的小部件。您可以通过onRecieve
在小部件提供程序类中使用来实现此目的:
- 使用配置活动并保留每个小部件 ID。或者将挂起的意图设置为小部件中的 onClick 事件,并将此意图中的小部件 id 传递给活动,然后将其持久化。这个想法 - 保存小部件 id,以便以后能够在它们之间有所不同。
- 从您的应用程序(活动、服务、警报管理器..)发送带有您要更新的小部件 ID 的广播。
onRecieve
将捕获广播,将获取小部件 ID,然后您可以在小部件提供程序类中使用具体小部件。