将广播接收器从IntentService发送到片段(活动)

时间:2015-02-02 11:15:48

标签: android fragment intentservice

当我将IntentService的广播接收器发送到Fragment(Activity)时出现问题。

我有一个应用程序有两种类型的进程: enter image description here

第一个进程有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()取消注册。 从第二个进程开始,我像IntentService一样运行DataFetcherService类。 enter image description here

我的代码在这里:

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)执行任何操作。

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

  • 删除处理程序。

  • 删除Looper.getMainLooper()。

  • 删除unregisterStickerReload()。

但它不起作用。

1 个答案:

答案 0 :(得分:2)

正如您所见LocalBroadcastManager课程概述:

  

帮助注册并向本地对象发送Intent广播   在你的过程中。

因为DataFetcherService服务在与datafetcher不同的进程中运行,并且活动MainFragment正在不同的进程中运行。这就是为什么在从{发送广播时未调用onReceive方法的原因{1}}方法。

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