我有应用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。
答案 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接口添加一个监听器。