Android中应用程序之间传递布尔值的方式是什么?

What is the way to pass a Boolean value between applications in Android?

我有一个应用程序 A 和一个应用程序 B,这些应用程序使用相同的证书签名。应用 A 有一个复选框偏好,应用 B 需要知道偏好是否被选中。

我想出了一个想法,即在应用程序 A 中的复选框状态的每次更改时都设置了所需的布尔值来广播一个意图。针对此意图有一个独特的操作以及具有 [=11= 的自定义权限] 保护级别应保证只有应用程序 B 会在其 BroadcastReceiver.

中收到此类意图

与它一起,我考虑使用 ContentProvider,这对我来说似乎不是最佳选择。 为了使用它,我需要覆盖一堆在我的特定情况下不会使用的 CRUD 方法。只会共享一个标志,因此无需与数据库通信。 我还查看了使用 Messenger 从应用程序 A 绑定到位于应用程序 B 中的 Service。在这种情况下,我得到一个 Handler,当用户选中或取消选中该设置时,我可以向应用程序 B 发送一条带有适当参数的消息。但是这种方法给 table 带来了一些问题 binding/unbinding到服务(泄漏连接可能性或连接过多)。

我遇到的问题是应用程序 B 必须有可能询问应用程序 A 中复选框的状态。例如,如果用户重新安装应用程序 B。

换句话说,我可以从应用程序 A 通知应用程序 B 关于复选框状态的更改,但是我如何从应用程序 B 向应用程序 A 询问该状态?

从 A 向 B 发送粘性广播可以解决问题,但由于可能存在安全漏洞,粘性广播在 API 级别 21 中 deprecated

您可以使用配置文件格式 key:value 并让您 activity(ies) 阅读此文件,您可以使此文件对用户不可见而对您的应用程序可见(记住 android 设备是一个 Linux 因此你可以很容易地制作一个不可见的文件)。 您还可以使用广播通知活动此配置文件已更改并需要重新读取。

另一种方法是为两个应用程序设置共享用户 ID。

I came up with an idea to broadcast an intent...

现在需要维护两份数据,这似乎没有必要,而且容易产生可靠性问题。例外情况是 B 可能保留而 A 被卸载。在这种情况下,您需要 B 来存储自己的 boolean.

副本

for using it I need to override a bunch of CRUD methods that won't be used in my particular case.

query() 覆盖为 return 包含您的 booleanMatrixCursor。覆盖其他人以抛出 RuntimeException.

Also I looked at binding to a Service, which is located in app B, from app A using a Messenger.

或者,在 A 中有一个 Service,它向 return 和 boolean 公开一个 AIDL 接口。让 B 绑定到服务以读取 boolean。如果B需要了解boolean中的实时状态变化,请在AIDL接口中添加一个监听器。