gpt4 book ai didi

android - 从另一个 Context 向 HostApduService 传递信息

转载 作者:太空宇宙 更新时间:2023-11-03 10:20:01 25 4
gpt4 key购买 nike

之前有人问过这个问题,但没有得到回应,所以我会尝试用不同的方式来表达这个问题。有哪些不同的方法可以将一些数据传递给 Android Service 而不能绑定(bind)到它或自己启动它?

这就是问题所在 - 我有一个 HostApduService,它由操作系统在每次 NFC 卡交易时启动。它需要权限 android.permission.BIND_NFC_SERVICE,这是一个系统权限,所以我的应用程序无法绑定(bind)到它。我不想让数据处于静止状态,因此写入磁盘的任何内容都是不行的。我想到了一些可能的解决方案,但它们要么困惑要么不安全:

  1. 将数据放入我们应用的 SharedPreferences。这就提出了一个 DAR 问题。
  2. 服务广播信息。 HostApduService 在卡交易期间运行,因此我无法在服务开始工作之前可靠地安排广播到达服务的时间。
  3. 将我要传递的信息放入某处的static 字段中。这很困惑,可能会导致并发问题,但这是我目前正在使用的。

还有其他想法吗?提前致谢。

最佳答案

我认为这个问题归结为另一个问题:

How would you store (persistent) data within a bound service?

HCE 服务是一个绑定(bind)服务,因此它只保证在其调用上下文存在时运行(参见 here )。因此,您在服务中存储的任何数据(→ 存在于 RAM 中的变量)都只会在服务的生命周期内存在,并且在服务重新启动后将不再可用。

因此,即使您可以绑定(bind)到 HCE 服务,绑定(bind)到服务并在服务中设置某些值也不会可靠地工作。同样的问题也适用于您向服务广播的数据。

在静态字段中存储值也存在类似的问题。只要它们的声明上下文(即声明它们的类)加载到虚拟机的内存中,这些字段就会存在。由于 VM 可以在服务未使用且应用程序的任何 Activity 未显示在前台时随时被终止,因此您无法确定您放入静态字段的数据在您需要的整个持续时间内是否存在。

因此唯一可靠存储数据的方法是使用持久存储技术,即使用 SharedPreferences 机制,使用内容提供程序(由持久存储上的数据库支持)或直接将数据存储到文件中。我想你能做的最好的事情就是将数据存储在加密的文件系统上。但是,这会给您带来另一个问题:如何(安全地)存储加密 key 。但是您可以使用 Android key 存储充分解决该问题(请参阅 herehere)。

关于android - 从另一个 Context 向 HostApduService 传递信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25018121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com