Android onReceive not called

柔情痞子 提交于 2019-12-13 02:16:16

问题


I'm trying to follow this example: What is the correct way for sharing data among AppWidgetProvider and RemoteViewsService.RemoteViewsFactory

As such, I have a RemoteViewsFactory that has this:

@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");
}

Then I have an AppWidgetProvider that has this:

@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);
}

And in the manifest:

    <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>

I get the debugger log for ACTION_APPWIDGET_UPDATE, but for my own Intent broadcast, it never fires onReceive (breakpoint is never even hit). Does anyone see what I'm doing wrong?


回答1:


For your own Intent broadcast to work, you have to register your BroadcastReceiver programmatically. So register your receiver as

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

And then send your broadcast as

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

;

Hope this helps.



来源:https://stackoverflow.com/questions/35263508/android-onreceive-not-called

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!