将广播接收器从 IntentService 发送到 Fragment (Activity)

Sending Broadcast Receiver from IntentService to Fragment (Activity)

当我从 IntentService 向 Fragment (Activity) 发送广播接收器时遇到问题。

我有一个包含两种进程的应用程序:

第一个进程有 MainActivity 和 MainFragment。在这个片段中,我是这样实现的:

private void registerStickerReload() {
    mStickerReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            if (action.equals(DataFetcherService.ACTION_RELOAD_STICKER)) {
                // Some code here
            }
        }
    };
    IntentFilter intentFilter = new IntentFilter(
            DataFetcherService.ACTION_RELOAD_STICKER);
    mLocalBroadcastManager.registerReceiver(mStickerReceiver, intentFilter);
}

和:

private void unregisterStickerReload() {
    if (mLocalBroadcastManager != null) {
        mLocalBroadcastManager.unregisterReceiver(mStickerReceiver);
    }
}

我从 onStart() 注册接收器并从 onStop() 注销。 从第二个进程开始,我运行 DataFetcherService class喜欢IntentService。

我的代码在这里:

private class BasicLoader extends AsyncTask<Request, Void, Response> {
    public BasicLoader() {
    }

    @Override
    protected Response doInBackground(Request... params) {
        Request request = params[0];
        Response response = request.execute();
        Handler handler = new Handler(Looper.getMainLooper());
        handler.post(new Runnable() {
            @Override
            public void run() {
                Intent intent = new Intent(ACTION_RELOAD_STICKER);
                LocalBroadcastManager.getInstance(getApplicationContext())
                        .sendBroadcast(intent);
            }
        });
        return response;
    }

    @Override
    protected void onPostExecute(Response result) {
        super.onPostExecute(result);
    }
}

我进行了调试,LocalBroadcastManager 发送了广播,但它对 onReceive(Context, Intent) 没有任何操作。

以下是我尝试过的一些案例:

但是没用。

如您所见LocalBroadcastManager class 概述:

Helper to register for and send broadcasts of Intents to local objects within your process.

因为 DataFetcherService 服务 运行 在与 datafetcher 不同的进程中,而 activity MainFragment 在不同的 process.that 中是 运行 ] 这就是为什么从 doInBackground 方法发送广播时不调用 onReceive 方法的原因。

要在不同进程或应用程序之间接收和发送广播,请使用 BroadcastReceiver