Явное обращение к намерению динамически передающего приемника

Я новичок в Android и пытаюсь понять связь между приложениями.

Я пытаюсь написать 3 маленьких приложения, которые могут общаться друг с другом. Если вы хотите отправить сообщение всем, вы просто используете неявное вещание.

неявное намерение intent.setAction("com.example.myChatMessage")

если вы хотите только 1 конкретный приемник, я сделал это с помощью

explicite Intent 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);       
    }
}
}

Он получает все неявные трансляции, но не имеет явного ответа - я не знаю, как hot, чтобы его адресовать. Можете ли вы мне помочь?

Ответ 1

Невозможно отправить явное намерение динамически зарегистрированному широковещательному приемнику. Регистрация приемника в AndroidManifest.xml является единственным способом.

Если вы динамически регистрируете BroadcastReceiver - вызывая Context.registerReceiver() - вы предоставляете экземпляр BroadcastReceiver... Если вы попытаетесь отправить намерение получателю, назвав класс BroadcastReceiver, он никогда не будет доставлен. Android-система не будет соответствовать объявлению, которое вы объявили классу экземпляра BroadcastReceiver, который вы зарегистрировали.

Источник: http://onemikro2nd.blogspot.com/2013/09/darker-corners-of-android.html