我正在使用由其他人编写的用于 USB 通信的库。我正在使用一个活动来查找正确的 USB 设备并制作适当的驱动程序对象,并且我想在另一个活动中使用该驱动程序(这有点复杂)。
不幸的是,驱动程序对象没有实现可打包或可序列化,所以我不知道如何做到这一点。所以我有两个问题
1) 在活动之间传递驱动程序对象有哪些选择?
2)即使我在问题1中成功了,我是否会因为接收活动没有被明确授予使用usb对象的权限而遇到问题?
我正在使用由其他人编写的用于 USB 通信的库。我正在使用一个活动来查找正确的 USB 设备并制作适当的驱动程序对象,并且我想在另一个活动中使用该驱动程序(这有点复杂)。
不幸的是,驱动程序对象没有实现可打包或可序列化,所以我不知道如何做到这一点。所以我有两个问题
1) 在活动之间传递驱动程序对象有哪些选择?
2)即使我在问题1中成功了,我是否会因为接收活动没有被明确授予使用usb对象的权限而遇到问题?
除了以下选项(以及其他选项,例如 Web 存储 -此处讨论,或JSON 选项)之外,没有办法将数据从一个发送Activity
到另一个。您应该重新考虑如何做您想做的事情,或者考虑使用不同的Driver
.
如果代码是开源或开放许可的,您可以考虑入侵Serializable
或Parcelable
提取源代码并对其进行修改以满足您的需求。有关反编译Android
源的更多信息,请参见此处。
1. SharedPreferences
, SQLite
, Serialization
, 或Content Providers
. 这些都需要您将驱动程序对象分解为简单的类型。更多关于存储的信息可以在文档中找到。
2. Parcelable
s可以通过Intent
Activity之间共享。
1.您可以使用SharedPreferences
、SQLite
或Serialization
。更多关于存储的信息可以在文档中找到。
2.您可以将其设置为静态变量。例如,有一个Store
保存静态变量的类:
public class Store {
/** provides static reference to the driver */
public static Object driver;
}
然后从任何地方设置,只需执行以下操作:
Store.driver = myDriver;
要从任何地方获取,只需执行以下操作:
Object driver = Store.driver;
3.创建一个自定义Application
类并将其设置在您的 Android 清单中。此应用程序可以存储驱动程序,并且不一定是静态的。有关这方面的更多信息,请参阅扩展应用程序以全局共享变量。
4.第三个选项是为您的Activity
. 因此,在引用了驱动程序的活动中,添加以下类变量:
private static MyActivity self;//replace MyActivity with the name of your class.
然后,添加 getter:
public static MyActivity sharedMyActivity() {
return self;
}
最后,添加这一行onCreate
(在调用之后super.onCreate(...)
):
self = this;
现在要访问您的驱动程序(我们会说它有一个 getter),只需从任何地方调用它:
Object driver = MyActivity.sharedMyActivity().getDriver();
至于您问题的第二部分- 如果您尝试读取和写入Activity
不提供USB
权限的硬件设备,这将不起作用。
我想我参加聚会有点晚了,但没有人提到使用Service让我很烦。
活动可以绑定到服务并给出指令,服务将拉起连接/通信工作。
您可以使用fastJSON轻松将数据序列化为 json 字符串,然后恢复为对象。您需要做的就是为您的驱动程序对象创建 setter 和 getter。
对于权限部分,您必须在用户安装包含该活动的应用程序时询问他。没有办法跳过它。
您可以将对象转换为 json 格式并作为字符串传递,在接收方您可以再次将此 json 字符串转换为对象。为此,您可以使用 gson 库。https://code.google.com/p/google-gson/downloads/list
1)您可以创建一个单例对象来保存所有交叉活动数据并将对象存储在那里。实现起来很简单。
2) 权限被授予整个应用程序,而不是单个活动。
只要您的活动属于不同的应用程序,它们就无法使用共享内存进行通信。