从服务接收活动中的数据

时间:2018-05-21 01:37:43

标签: android broadcastreceiver broadcast

我已经针对类似问题的其他问题查看了许多解决方案,但我无法弄清楚我的代码有什么问题。据我所知,LocalBroadcast是一种流行的方式,我花时间尝试实现它。目前,接收器并未在我的清单中声明,但据我所知,这是var params = { color: 0xff00ff }; var gui = new dat.GUI(); var folder = gui.addFolder( 'MATERIAL' ); folder.addColor( params, 'color' ) .onChange( function() { cube.material.color.set( params.color ); } ); folder.open(); 行的用途。

在我的活动中:

register

在服务中我定义了一个方法:

private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d("MyActivity", "onReceive");
        String action = intent.getAction();
        int current = intent.getIntExtra("test", 0);
        Toast.makeText(MyActivity.this, current.toString(), Toast.LENGTH_LONG).show();
    }
};

@Override
public void onResume() {
    super.onResume();
    Log.d("MyActivity", "onResume()");
    LocalBroadcastManager.getInstance(MyActivity.this).registerReceiver(
            mMessageReceiver, new IntentFilter("currentUpdate"));
}
@Override
protected void onPause() {
    Log.d("MyActivity", "onPause()");
    LocalBroadcastManager.getInstance(MyActivity.this).unregisterReceiver(mMessageReceiver);
    super.onPause();
}

我在服务的其他地方使用它:

private void sendNewBroadcast(Intent intent, int current){
    intent.putExtra("test", current);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);
    Log.d("MyService", "new Broadcast sent from service");
}

我已经调试了,除了接收'之外,一切似乎都在工作。部分。我错过了什么吗?该服务以不同的活动开始,并且正在进行中。

1 个答案:

答案 0 :(得分:2)

首先,广播actionPerformed上的操作String需要与您注册接收方的Intent上设置的操作相匹配。最初,它们是不同的,但它可能只是一个错字。

其次,IntentFilter不能跨进程工作。 LocalBroadcastManagerActivity必须在同一进程中运行才能使用Service。如果LocalBroadcastManager需要在一个单独的过程中,你将不得不使用其他一些机制;例如,Service s,在Intent上发送和接收的广播,支持IPC的某些事件总线实现等。