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

时间:2016-07-13 21:58:08

标签: android android-intent process

我有应用A和应用B,应用程序使用相同的证书进行签名。 App A有一个复选框首选项,应用B需要知道是否选中了首选项。

我想出了一个想法,即在应用A中每次更改复选框状态时设置需要布尔值的意图。对此意图执行唯一操作以及具有signature保护的自定义权限级别应该保证只有应用程序B才会在其BroadcastReceiver中收到此类意图。

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

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

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

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

2 个答案:

答案 0 :(得分:0)

您可以使用配置文件格式键:值并让您的活动读取此文件,您可以使该文件对用户不可见并且对您的应用程序可见(请记住,android设备是一个Linux,因此您可以轻松制作一个看不见的文件)。 您还可以使用广播通知活动此配置文件已更改,需要再次阅读。

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

答案 1 :(得分:0)

  

我提出了一个广播意图的想法......

现在您需要维护两份数据副本,这似乎是不必要的,并且容易出现可靠性问题。例外情况是,如果在卸载A时B可能仍然存在。在这种情况下,您需要B来存储自己的boolean

副本
  

使用它我需要覆盖一堆不能在我的特定情况下使用的CRUD方法。

覆盖query()以返回包含MatrixCursor的{​​{1}}。覆盖其他人以抛出boolean

  

此外,我还使用Messenger查看了应用程序A中绑定到位于应用程序B中的服务。

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