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

标签 android broadcastreceiver

我是 Android 的新手,正在尝试了解应用程序之间的通信。

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

隐式 Intent intent.setAction("com.example.myChatMessage")

如果你只想给 1 个特定的接收器分配地址,我用

显式 Intentintent.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);       
    }
}
}

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

最佳答案

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

If you dynamically register a BroadcastReceiver – by calling Context.registerReceiver() – you supply a BroadcastReceiver instance ... If you try to send an Intent to the receiver by naming the class of the BroadcastReceiver, it will never get delivered .. The Android system will not match the Intent you declared to the class of the BroadcastReceiver instance you registered.

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

关于android - 将 Intent 显式寻址到动态广播接收器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14810134/

相关文章:

java - 如何在 Java 中比较时间?

android - 如何设置发送到NotificationHub的推送通知的高优先级

android - 如何应对Android XLarge屏幕?

java - Strava API 在初始身份验证时返回 404

android - 如何在 Android 中设置微调值运行时

java - 响应Intent。ACTION_BATTERY_CHANGED

android - 关闭我的应用程序后未调用 BroadcastReceiver

android - 为什么这个广播接收器不能在 Lollipop 中工作?

java - 如何处理网络状态变化时的在线媒体播放器(网络在 WiFi 或移动数据之间切换)?

外部库中的 Android BroadcastReceiver?