在 2 个 Android 应用程序之间共享数据

Posted

技术标签:

【中文标题】在 2 个 Android 应用程序之间共享数据【英文标题】:Sharing data between 2 Android applications 【发布时间】:2021-05-23 23:07:45 【问题描述】:

类似的回答我也经历过很多,但是最近因为很多事情都变了,所以想再问一遍。

我有一个将数据存储在共享首选项中的应用程序 A。我希望应用程序 B 能够访问应用程序 A 存储在共享首选项中的数据。

目前的调查结果 -

我们不能将 WORLD_READABLE 用于共享首选项,因为它有 已弃用。 我们不能使用 sharedUserId 来共享数据,因为它已经 已弃用。 我还了解到使用相同密钥签名的应用程序可以访问每个 别人的代码和数据。但是我们可以通过这样做来访问数据吗? (或者我们还需要在签名的同时做其他事情吗? 过程?)。如果是,怎么做?

其中一种解决方案是使用 Content Providers 共享数据(数据源是 Shared Preferences)。 还有其他方法可以共享数据吗?

【问题讨论】:

【参考方案1】:

我还了解到使用相同密钥签名的应用可以访问彼此的代码和数据

仅通过sharedUserId

还有其他方法可以共享数据吗?

你可以:

让一个应用公开另一个应用启动的服务并通过Intent extras 传递数据 让一个应用公开另一个应用绑定的服务并通过 AIDL 参数传递数据 让一个应用向另一个应用发送显式广播Intent,并在Intent extras 中包含数据 让一个应用使用Intent extras 中包含的数据在另一个应用中启动一个活动

ContentProvider 解决方案一样,这些选项可以通过android 的权限系统进行保护。如果您仔细设置自定义权限,将protectionLevel 设置为signature,这些应用程序将能够相互通信,但其他应用程序将无法侵入这些通信通道。

当然,另一种选择是只拥有一个应用程序。

【讨论】:

感谢您的回答。在上面提到的所有 4 个解决方案中,流程都是从要共享数据的应用程序开始的,如果我错了,请纠正我。我的用例是访问其他应用程序已经存储的数据,内容提供者允许我这样做。我的用例基本上是用于访问令牌和其他详细信息的 SSO 实现。 @KashishMalhotra 如果用于帐户数据,您是否考虑过 AccountManager? developer.android.com/training/id-auth/custom_auth @KashishMalhotra:“在上面提到的所有 4 种解决方案中,流程从想要共享数据的应用程序开始,如果我错了,请纠正我”——第二个(绑定到service) 更像是一种“拉”机制,而不是“推”,这似乎是您想要的。 @GabeSechan 谢谢你的建议,我通过了。我们已经有一个正在运行的应用程序,我们想让另一个应用程序运行并使用 SSO。由于大多数用户已经登录到第一个应用程序,我们将无法使用第一个应用程序创建自定义帐户,对吗? 另外,我想知道像亚马逊这样的公司如何通过他们的应用程序实现 SSO,我在任何地方都找不到。他们没有列出自定义帐户,所以我最好的猜测是这些应用程序正在它们之间共享数据。 CMIIW。如果有人可以向我指出一些相关资源,那就太好了。

以上是关于在 2 个 Android 应用程序之间共享数据的主要内容,如果未能解决你的问题,请参考以下文章

在 Android 应用程序之间共享不可变文件

在 Android 应用程序之间共享文件? [关闭]

可以在firebase中的ios和android项目之间共享用户进行身份验证

ios - 在应用程序之间共享数据,但链接到 Apple ID

2个RecyclerViews之间的Android共享元素转换

Android - 服务是不是在进程之间共享?