【问题标题】:Explicit addressing an Intent to a dynamically broadcast receiver将 Intent 显式寻址到动态广播接收器
【发布时间】:2013-02-11 10:21:03
【问题描述】:

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

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

【问题讨论】:

  • 使用方法:intent.setPackage("com.example.test.android.broadcastreceiver.b") 用于显式寻址应用程序,然后使用隐式意图解析。由于错误link,您应该仅在Android 4.0 上使用它Alternatively, starting with ICE_CREAM_SANDWICH, you can also safely restrict the broadcast to a single application with Intent.setPackage
  • 只找到一篇论文link 写着:However, Dynamic Receivers (Broadcast Receivers declared at runtime) are an exception, since some can only receive implicit Intents. Thus, they are always public, and Intents they receive must match one of their Intent Filters. 哪一篇可以收到明确的?

标签: android broadcastreceiver


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2018-10-27
    • 1970-01-01
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 2013-08-03
    相关资源
    最近更新 更多