我想编写一个 Android 应用程序(我们称之为“ZX”),它可以与预先未知的其他应用程序进行通信。
ZX 不想与所有其他应用程序通信。它只想通过 ZX 权限与用户批准的应用程序进行通信。用户可以通过 ZX 的一项活动随时授予和撤销 ZX 权限。
为了做到这一点,ZX 需要确定哪个应用程序正在尝试与它通信,并且在应用程序第一次与 ZX 连接的情况下,它需要显示其名称(或其他唯一标识它的名称)到用户询问它是否应该允许它。
问题:
1)如何识别调用应用程序?
2)为此推荐什么IPC机制?
我想编写一个 Android 应用程序(我们称之为“ZX”),它可以与预先未知的其他应用程序进行通信。
ZX 不想与所有其他应用程序通信。它只想通过 ZX 权限与用户批准的应用程序进行通信。用户可以通过 ZX 的一项活动随时授予和撤销 ZX 权限。
为了做到这一点,ZX 需要确定哪个应用程序正在尝试与它通信,并且在应用程序第一次与 ZX 连接的情况下,它需要显示其名称(或其他唯一标识它的名称)到用户询问它是否应该允许它。
问题:
1)如何识别调用应用程序?
2)为此推荐什么IPC机制?
“使用 Binder 或 Messenger 是 Android 中 RPC 式 IPC 的首选机制。如果需要,它们提供了一个定义良好的接口,可以实现端点的相互身份验证。”
http://developer.android.com/training/articles/security-tips.html#IPC
很难对这个问题给出一个很好的答案,因为你对细节非常神秘......但是,我会尝试一下......
根据“ZX”的作用,像观察者模式这样的东西可能适用于此。如果应用程序想与 ZX 通信,它们会向 ZX 发送一条消息,将自己添加到 ZX 维护的查找表/列表中。
基本上你会有这样的东西......
应用程序AI希望与 ZX 通信。它发送ZX一条包含有关应用程序信息的消息(无论您需要什么,IP 地址等)。该信息可以转到一个函数,例如创建一个存储有关应用程序的所有相关信息addApplication()的新对象。CommApp
ZX然后可以发送AI一个唯一的身份验证密钥,它可以用于进一步的通信。这可以处理实际的会话。两个应用程序之间的任何进一步通信都可以使用唯一密钥进行身份验证。这种方法假设您使用身份验证来识别不同的应用程序,而不是试图将“坏人”拒之门外。
如果您可以扩展您的实际情况,我很乐意编辑我的问题以更适合您的需求。