将广播从一个进程发送到另一个进程
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
并为此创建一个清单条目 <receiver>
,并使用与您正在广播的广播 Intent
匹配的 <intent-filter>
。
【讨论】:
以上是关于将广播从一个进程发送到另一个进程的主要内容,如果未能解决你的问题,请参考以下文章
将结构从一个进程发送到另一个进程的最简单方法是什么? [关闭]
我可以使用非阻塞套接字使用“sendmsg/recvmsg”将 FD 从一个进程发送到另一个进程吗?