android - 如何将广播从一个应用程序发送到另一个应用程序

标签 android broadcastreceiver broadcast

我有 App A 和 App B。在 App A 中,我想向 App B 发送广播。 这是应用 A 的代码:

final Intent intent = new Intent();
intent.setAction("com.pkg.perform.Ruby");
intent.putExtra("KeyName", "code1id");
intent.setComponent(new ComponentName("com.pkg.AppB", "com.pkg.AppB.MainActivity"));
sendBroadcast(intent);

在 App B 中 - 在 MainActivity 中,我有 MyBroadCastReceiver 类。

public class MainActivity extends Activity {
    private MyBroadcastReceiver MyReceiver;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // Receive broadcast from External App
        IntentFilter intentFilter = new IntentFilter("com.pkg.perform.Ruby");
        MyReceiver = new MyBroadcastReceiver();
        if(intentFilter != null)
        {
            registerReceiver(MyReceiver, intentFilter);
        }
    }

    public class MyBroadcastReceiver extends BroadcastReceiver
    {
        @Override
        public void onReceive(Context context, Intent intent) {
            Toast.makeText(MainActivity.this, "Data Received from External App", Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if(MyReceiver != null)
            unregisterReceiver(MyReceiver);
    }
}

我收到错误 - 接收方未注册

最佳答案

首先要在 list 文件中声明应用 B 中的接收器,如下所示:

<receiver android:name=".MyBroadcastReceiver"
    android:enabled="true"
    android:exported="true">
        <intent-filter>
          <action android:name="com.pkg.perform.Ruby" />
        </intent-filter>
</receiver>

发送广播时,将 FLAG_INCLUDE_STOPPED_PACKAGES 标志添加到 Intent [src]因为当您从应用程序 A 向应用程序 B 广播时,应用程序 B 可能未运行,此标志可确保即使未运行的应用程序也能进行广播:

FLAG_INCLUDE_STOPPED_PACKAGES flag is added to the intent before it is sent to indicate that the intent is to be allowed to start a component of a stopped application.

intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);

你的情况是这样的:

    final Intent intent=new Intent();
    intent.setAction("com.pkg.perform.Ruby");
    intent.putExtra("KeyName","code1id");
    intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
    intent.setComponent(  
        new ComponentName("com.pkg.AppB","com.pkg.AppB.MyBroadcastReceiver"));  
    sendBroadcast(intent);

关于android - 如何将广播从一个应用程序发送到另一个应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33492790/

相关文章:

android - 为什么我的应用程序崩溃调用 "setupActionBarWithNavController(navController, appBarConfiguration)"

java - 如何在 native 浏览器中打开 URI (android)

android - 权限拒绝,即使在 list 中添加了正确的权限之后

java - 如何在 0.0.0.0 上接收广播包?

linux - 广播消息中的绑定(bind)函数

android - 显示对话框错误 - 已泄漏窗口 com.android.internal.policy.impl.phonewindow

java - 当你得到 "Activity is not responding, Force Close, Wait"时,从哪里开始调试?

android - BroadcastReceiver未接收 Intent

android - 使用具有 PhoneStateListener 功能的 BroadcastReceiver

javascript - 如何以 blob 数组的形式接收连续的视频 block 并在 Websocket 中动态设置为视频标签