Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 向动态广播接收器显式寻址意图_Android_Broadcastreceiver - Fatal编程技术网

Android 向动态广播接收器显式寻址意图

Android 向动态广播接收器显式寻址意图,android,broadcastreceiver,Android,Broadcastreceiver,我刚接触安卓系统,试图了解应用程序之间的通信 我正试图写3个小应用程序,可以相互通信。如果你想向每个人发送消息,你只需使用隐式广播 隐式意图Intent.setAction(“com.example.myChatMessage”) 如果你只想处理一个我用过的特定接收者 明确说明意图Intent.setComponent(“com.example.test.android.broadcastreceiver.b”, “com.example.test.android.broadcastreceiv

我刚接触安卓系统,试图了解应用程序之间的通信

我正试图写3个小应用程序,可以相互通信。如果你想向每个人发送消息,你只需使用隐式广播

隐式意图
Intent.setAction(“com.example.myChatMessage”)

如果你只想处理一个我用过的特定接收者

明确说明意图
Intent.setComponent(“com.example.test.android.broadcastreceiver.b”,
“com.example.test.android.broadcastreceiver.b.myBroadcastReceiver”)

当广播接收器是一个单独的类并在AndroidManifest.xml中定义时,这一点就起作用了

我的问题是:是否可以显式寻址已注册的动态呼叫广播接收器


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

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

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


来源:

使用方法:
intent.setPackage(“com.example.test.android.broadcastreceiver.b”)
用于显式寻址应用程序,然后使用隐式intent解析。由于存在缺陷,您应该仅在Android 4.0上使用它。或者,从冰淇淋三明治开始,您还可以安全地将广播限制为单个应用程序。setPackage只发现一篇文章说:
但是,动态接收器(在运行时声明的广播接收器)是一个例外,因为有些人只能接受隐含的意图。因此,它们总是公共的,并且它们接收的意图必须与它们的意图过滤器中的一个匹配。
哪一个可以接收明确的意图过滤器?
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);       
    }
}
}