【发布时间】: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.哪一篇可以收到明确的?