将广播从一个进程发送到另一个进程

Posted

技术标签:

【中文标题】将广播从一个进程发送到另一个进程【英文标题】:Sending broadcast from one process to another process 【发布时间】:2020-01-08 08:17:28 【问题描述】:

这是我的要求。

我有一个可以被用户强行杀死的应用程序。我希望这个应用程序接收来自其他应用程序的广播以执行某些任务,即使它被强制终止。

我正在尝试使用服务制作另一个应用程序,该服务将在事件 1 分钟内向我的第一个应用程序发送广播。

我的第一个应用程序应该会收到这个广播,即使它被强制终止。

这就是我想要做的。

在第一个应用中:

    BroadcastReceiver dummy = new BroadcastReceiver() 
    @Override
    public void onReceive(Context context, Intent intent) 
        Log.e("broadcast Received","broadcast Received");
    
;

 IntentFilter filter = new IntentFilter("com.action.blockapp");
    registerReceiver(dummy,filter);

在我的第二个应用中。

        Intent intent = new Intent("com.action.blockapp");
        intent.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
        intent.setPackage("com.example.myapplication2");
        sendBroadcast(intent);

当我的应用程序被强制终止时,我无法接收广播。 请提出建议。

【问题讨论】:

【参考方案1】:

我的观点。您需要在后台运行的服务中声明 revice。您在清单中声明的​​具体修订<receiver android:name=".service.NotifyReceiver" /> </application>

服务运行时。您可以从下面的 revice 中获取通知

Intent intent1 = new Intent(context, NotifyReceiver.class); intent1.setAction(action); PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent1, PendingIntent.FLAG_UPDATE_CURRENT);

希望能帮到你!

【讨论】:

【参考方案2】:

您已在代码中动态注册了您的BroadcastReceiver。当您的应用程序被强制停止时,该代码将不再运行并且您的 BroadcastReceiver 不再存在。它不再注册。

您将需要创建一个适当的类 extends BroadcastReceiver 并为此创建一个清单条目 &lt;receiver&gt;,并使用与您正在广播的广播 Intent 匹配的 &lt;intent-filter&gt;

【讨论】:

以上是关于将广播从一个进程发送到另一个进程的主要内容,如果未能解决你的问题,请参考以下文章

将结构从一个进程发送到另一个进程的最简单方法是什么? [关闭]

将快速文本输入发送到另一个进程(窗口)

将大字节流缓冲区发送到另一个进程

我可以使用非阻塞套接字使用“sendmsg/recvmsg”将 FD 从一个进程发送到另一个进程吗?

Linux。 C 中的管道。将数据发送到另一个进程。写作和阅读

将 signalfd 发送到另一个进程