在不将它们置于前台的情况下进行应用间通信的最佳方法?

Posted

技术标签:

【中文标题】在不将它们置于前台的情况下进行应用间通信的最佳方法?【英文标题】:Best approach for inter-app communcation without foregrounding them? 【发布时间】:2019-10-16 10:26:03 【问题描述】:

我一直在苦苦思考如何在不将每个应用置于前台的情况下进行应用间通信的最佳方法。我想过使用 BroadcastReceivers 在两个应用程序之间进行通信,但似乎它们必须在清单中注册,从而难以将数据带到活动中。例如,一个应用程序会将其状态发送给另一个应用程序,表明它已准备好开始运行会话。但是,我希望在启动会话时将其他应用程序保留在后台,并让用户在选择时在应用程序之间切换。

有谁知道最好的方法是什么?基本上,只要另一个应用程序正在运行,我就想将数据发送到另一个应用程序。

【问题讨论】:

你传递什么样的数据?通过的频率如何?是什么导致数据被传递(用户输入?服务器响应?其他?)?。 数据主要通过用户输入传递。 如果应用 A 想与后台应用 B 通信,唯一的方法是在应用 B 上设置 ContentProvider。 【参考方案1】:

我猜你对broadcastreceiver 的想法一点也不差: 您不必在清单中注册broadcastreceiver,您也可以按需创建它们,甚至可以使用您的Activity 创建它们。 但除此之外,还有一些方法可以解决您的问题:

方法#1

首先,您可以使用IntentServicePendingIntent 使用ResultReceiver 进行简单的通信。 另请参阅这个很棒的 *** 问题以获取更多信息:

android communication between two applications

方法#2

更通用的方法是使用IntentFilter 和捕获发送数据的方案。它也是基于意图的,并且可能是您的方案的解决方案,如果(!)您正确处理数据的捕获:在您的情况下,仅当它正在运行时。 另请参阅本文以获取此方法的(有点)简短示例:

https://android-developers.googleblog.com/2009/11/integrating-application-with-intents.html .

方法#3

最后但同样重要的是:利用共享(但安全!)文件和其他数据存储选项。当您的第二个应用程序正在运行时,这可能是一个加密文件和一个活动侦听器。这可能还需要其他提到的选项的其他部分,例如可以由AlarmmanagerJobScheduler 管理的正在运行的IntentService。 对于这种情况,我推荐官方 Android 文档:

https://developer.android.com/training/secure-file-sharing/setup-sharing.html https://developer.android.com/guide/topics/data/data-storage.html .

另外:因为在大多数情况下你会有某种“后台运行服务”, 我建议您看看 Android 为您提供的一些方法,因为它们可以完全改变适合的方法和可能性:

https://www.bignerdranch.com/blog/choosing-the-right-background-scheduler-in-android/

长话短说:

祝你好运,让我知道! ;)

【讨论】:

以上是关于在不将它们置于前台的情况下进行应用间通信的最佳方法?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不将应用程序放在前面的情况下从 BLE 设备控制 iOS 应用程序进行后台处理

如何在不将文件写入光盘的情况下创建文件并压缩它们?

在不将应用列入白名单的情况下避免打盹模式

有啥方法可以在不将 CIImage 转换为 UIImage 或 CGImage 的情况下将 CIImage 转换为 NSData?

如何在不将密码保存在数据库中的情况下验证用户身份

如何在不将其备份到 iCloud 的情况下为我的应用程序提供演示数据?