Android: pass object without serialization
我正在使用其他人编写的USB通信库。我正在使用一个活动来找到正确的USB设备并生成适当的驱动程序对象,我想在另一个活动中使用该驱动程序(这其中的原因有点复杂)。
不幸的是,驱动程序对象没有实现parcelable或serializable,所以我不确定如何实现。所以我有两个问题
1)在活动之间传递驱动程序对象有哪些选项?
2)即使我在问题1中成功了,我是否会因为接收活动没有得到使用USB对象的明确许可而遇到问题?
我想我参加聚会有点晚了,但没人提到服务的使用,这让我很苦恼。
活动可以绑定到服务并给出指示,服务将启动连接/通信作业。
除了以下选项(以及其他选项,如此处讨论的Web存储或JSON选项),没有办法将数据从一个
如果代码是开放源代码或开放许可的,您可以考虑通过提取源代码并根据您的需要对其进行修改来黑客攻击
1。
2。
1。您可以使用
2。您可以将其设置为静态变量。例如,有一个
1 2 3 4 | public class Store { /** provides static reference to the driver */ public static Object driver; } |
然后从任何地方设置,只需执行以下操作:
1 | Store.driver = myDriver; |
从任何地方出发,只要做到:
1 | Object driver = Store.driver; |
三.创建一个自定义的
4。第三个选项是为您的
1 | private static MyActivity self;//replace MyActivity with the name of your class. |
然后,添加getter:
1 2 3 | public static MyActivity sharedMyActivity() { return self; } |
最后,在
1 | self = this; |
现在要访问您的驱动程序(我们会说它有一个getter),只需从任意位置调用:
1 | Object driver = MyActivity.sharedMyActivity().getDriver(); |
至于问题的第二部分——如果您试图读取和写入不提供
您可以将对象转换为JSON格式并作为字符串传递,在接收端,您可以再次将这个JSON字符串转换为对象。为此,您可以使用GSON库。网址:https://code.google.com/p/google-gson/downloads/list
可以使用fastjson轻松地将数据序列化为json字符串,然后恢复到对象。您需要做的只是为驱动程序对象创建setter和getter。
对于权限部分,您必须在用户安装包含活动的应用程序时向其询问。没办法跳过它。
1)您可以创建一个singleton对象来保存所有跨活动数据并将对象存储在那里。实现起来很简单。
2)权限授予整个应用程序,而不是单个活动。
就您的活动属于不同的应用程序而言,它们无法通过使用共享内存进行通信。