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() を呼び出して BroadcastReceiver を動的に登録する場合、BroadcastReceiverインスタンスを提供します... BroadcastReceiver のクラスに名前を付けて Intent を受信機に送信しようとすると、配信されません.. Android system は、登録した BroadcastReceiver インスタンスのクラスに宣言した Intent と一致しません。

ソース: http://onemikro2nd.blogspot.com/2013/09/darker-corners-of-android.html

于 2013-10-20T21:06:52.450 に答える