【问题标题】:How to broadcast intent to multiple WidgetProviders如何向多个 WidgetProviders 广播意图
【发布时间】:2018-09-15 07:38:00
【问题描述】:

我有 2 个小部件,每个小部件都有自己的 WidgetProvider。这是类层次结构:

      AppWidgetProvider
             |
    CommonWidgetProvider
     |                |  
WidgetAProvider  WidgetBProvider

两个小部件都有一个更新小部件的按钮,但我想更新所有小部件(WidgetA 和 WidgetB),无论您点击哪个。

我像这样广播更新意图(在 WidgetA 中):

不用担心 EXTRA_APPWIDGET_IDS 只包含当前小部件的 ID - 我稍后会在 Provider 中检索所有小部件的 ID

// 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 广播此更新?

【问题讨论】:

    标签: android android-intent android-widget android-pendingintent android-broadcast


    【解决方案1】:

    不要使用PendingIntent 直接发送广播,因为这样您总是必须明确定位AppWidgetProviders 之一。

    相反,使用PendingIntent 启动IntentService 向每个使用特定IntentFilterBroadcastReceiver 发送广播。您可以通过使用签名权限来禁止第三方BroadcastReceivers 接收您的广播(参见例如this post

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-24
      • 2010-12-07
      相关资源
      最近更新 更多