Я читал в интернете / книге пример о виджете приложения, нормальный пример обновления виджета в onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds)
методе AppWidgetProvider, подобном этому:
final int N = appWidgetIds.length;
for (int i=0; i<N; i++) {
int appWidgetId = appWidgetIds[i];
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
updateViews.setTextViewText(R.id.mytext, "updated text");
appWidgetManager.updateAppWidget(appWidgetId, updateViews);
}
Обновляет каждый виджет в цикле.
Но теперь я должен реализовать виджет приложения, он обновляется в BroadcastReceiver, метод onReceive(Context context, Intent intent)
, так как нет переданных int [] appWidgetIds. Поэтому я реализовал код следующим образом:
RemoteViews updateViews = new RemoteViews(context.getPackageName(), R.layout.mywidget_layout);
updateViews.setTextViewText(R.id.mytext, "updated text");
ComponentName myComponentName = new ComponentName(context, AndroidBatteryWidgetProvider.class);
AppWidgetManager manager = AppWidgetManager.getInstance(context);
manager.updateAppWidget(myComponentName, updateViews);
Он не обновлял виджеты один за другим, но фактически все виджеты обновлялись одновременно. Хотя это работало так, как я хочу, но я запутался, почему нет необходимости обновлять все виджеты один за другим, как раньше.
В чем разница между двумя методами?
Можно ли отправить еще одну трансляцию с BroadcastReceiver.onReceive()
для запуска AppWidgetProvider.onUpdate()
? И как?