18

我是 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);       
    }
}
}

它接收所有隐式广播,但没有明确的广播 - 我不知道如何处理它。你能帮助我吗?

4

1 回答 1

18

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

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

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

于 2013-10-20T21:06:52.450 回答