Android 未调用 onReceive

Android onReceive not called

我正在尝试按照以下示例进行操作: What is the correct way for sharing data among AppWidgetProvider and RemoteViewsService.RemoteViewsFactory

因此,我有一个 RemoteViewsFactory 有这个:

@Override
public void onDataSetChanged() {
    // Subsequent calls to get the data.
    newsGetter.updateListFeed(null, new NewsGetter.OnUpdateListFeedFinishedListener() {
        @Override
        public void onUpdateListFeedFinished(VolleyError error) {
            //async return here from volley

            Intent widgetUpdateIntent = new Intent(NewsWidgetBase.FEED_UPDATED);
            widgetUpdateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
            LocalBroadcastManager.getInstance(context).sendBroadcast(widgetUpdateIntent);
        }
    });

    Log.e(TAG, "******************************** onDataSetChanged PROVIDER");
}

然后我有一个 AppWidgetProvider 有这个:

@Override
public void onReceive(Context context, Intent intent) {

    final String action = intent.getAction();

    if (AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)) {
        Log.e("WidgetBase", "******************************** onReceive ACTION_APPWIDGET_UPDATE");
    } else if (FEED_UPDATED.equals(action)) {
        Log.e("WidgetBase", "******************************** onReceive FEED_UPDATED");

        AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context);
        int appWidgetId = intent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID,
                AppWidgetManager.INVALID_APPWIDGET_ID);
        updateAppWidget(context, appWidgetManager, appWidgetId);
    }

    super.onReceive(context, intent);
}

并且在清单中:

    <receiver android:name=".widgets.a">
        <intent-filter>
            <action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
            <action android:name="com.myapp.FEED_UPDATED" />
        </intent-filter>

        <meta-data
            android:name="android.appwidget.provider"
            android:resource="@xml/abc" />
    </receiver>

我得到了 ACTION_APPWIDGET_UPDATE 的调试器日志,但对于我自己的 Intent 广播,它从未触发 onReceive(甚至从未命中断点)。有人看到我做错了什么吗?

要让您自己的 Intent broadcast 工作,您必须以编程方式 register 您的 BroadcastReceiver。所以将您的接收器注册为

LocalBroadcastManager.getInstance(this).registerReceiver(YourWidgetReceiver, new IntentFilter("your_intent_action"));

然后将您的广播发送为

Intent intent = new Intent("your_intent_action");
LocalBroadcastManager.getInstance(getApplicationContext()).sendBroadcast(intent)

;

希望这对您有所帮助。