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