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

Jen*_* S. 12 android broadcastreceiver

我是Android新手并试图了解应用之间的沟通.

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

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

如果你想只使用1个特定的接收器来加入它

明确的意图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);       
    }
}
}
Run Code Online (Sandbox Code Playgroud)

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

d2v*_*vid 11

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

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

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