Как транслировать намерение нескольким WidgetProvider

У меня есть 2 виджета, у каждого свой WidgetProvider. Это иерархия классов:

      AppWidgetProvider
             |
    CommonWidgetProvider
     |                |  
WidgetAProvider  WidgetBProvider

У обоих виджетов есть кнопка, которая обновляет виджет, но я хотел бы обновить все виджеты (как WidgetA, так и WidgetB), независимо от того, на какой из них вы нажмете.

Я транслирую намерение обновления следующим образом (в WidgetA):

не беспокойтесь о том, что EXTRA_APPWIDGET_IDS содержит только текущий идентификатор виджета - позже я получаю идентификаторы всех виджетов в Провайдере

// setup click on update icon
Intent intent = new Intent(data.context, WidgetAProvider.class); // how can I broadcast to both A AND B? Now it will broadcast only to A.
intent.setAction(AppWidgetManager.ACTION_APPWIDGET_UPDATE);
intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, new int[] {data.widgetId});

PendingIntent pendingIntent = PendingIntent.getBroadcast(data.context,
    data.widgetId, intent, PendingIntent.FLAG_UPDATE_CURRENT);
remoteViews.setOnClickPendingIntent(R.id.widgetUpdateContainer, pendingIntent);

Как я могу передать это обновление обоим WidgetProvider?

1
0
49
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не используйте PendingIntent для прямой передачи широковещательной передачи, потому что в этом случае вам всегда нужно явно нацеливаться на один из AppWidgetProvider.

Вместо этого используйте PendingIntent, чтобы запустить IntentService для отправки широковещательной передачи на каждый BroadcastReceiver, который использует определенный IntentFilter. Вы можете запретить сторонним BroadcastReceiver получать вашу трансляцию, используя разрешения подписи (см., Например, эта почта)

Другие вопросы по теме