显式地将Intent寻址到动态广播接收器

时间:2013-02-11 10:21:03

标签: android broadcastreceiver

我是Android的新手,并尝试了解应用之间的通信。

我正在尝试编写3个可以互相通信的小应用程序。如果您想向每个人发送消息,您只需使用隐式广播。

隐含意图 intent.setAction("com.example.myChatMessage")

如果你想只用一个特定的接收器,我用

来做

明确意图 intent.setComponent("com.example.test.android.broadcastreceiver.b", "com.example.test.android.broadcastreceiver.b.myBroadcastReceiver")

这是有效的,当广播接收器是一个单独的类并在AndroidManifest.xml中定义。

我的问题:是否可以显式地添加动态注册的广播接收器

package com.example.test.android.broadcastreceiver.b;

public class MainActivity extends Activity {

private final IntentFilter intentfilter = new IntentFilter("com.example.myChatMessage");
private myBroadcastReceiver broadcastreceiver;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    broadcastreceiver = new myBroadcastReceiver();
    registerReceiver(broadcastreceiver, intentfilter);
}

public static class myBroadcastReceiver extends BroadcastReceiver{
    @Override
    public void onReceive(Context context, Intent intent) {
        String message = intent.getStringExtra("message");
        Log.d("message", "B received: "+message);       
    }
}
}

它接收所有隐式广播,但没有明确的广播 - 我不知道热到它。你能救我吗?

1 个答案:

答案 0 :(得分:10)

似乎不可能向动态注册的广播接收器发送显式意图。在AndroidManifest.xml中注册接收器是唯一的方法。

  

如果您动态注册BroadcastReceiver - 通过调用Context.registerReceiver() - 您提供BroadcastReceiver 实例 ...如果您尝试通过命名BroadcastReceiver的类将Intent发送到接收方,它永远不会被交付.. Android系统将不会与您声明的Intent匹配您注册的BroadcastReceiver实例的类。

来源:http://onemikro2nd.blogspot.com/2013/09/darker-corners-of-android.html