我正在使用UsbSerialForAndroid库来实现与设备的串行端口连接。
我需要跨活动发送serial port
个对象。 UsbSerialPort的定义是here。
目前,我的代码能够借助putExtra
Intent
方法返回指定端口地址的字符串。我希望将serial port
发送到另一个活动(这是因为我无法从地址重新创建串行端口对象)。
为了发送一个对象和Intent
,该对象应该是可以分配的。但原始的库类文件在java中。
如何在这样一个预先存在的java类上实现parcelable?我更喜欢使用kotlin语言来实现这一目标。
一个似乎合乎逻辑的选项是使用原始 SerialUsbPort
类作为基类,并将新类扩展为parcelable(使用@Parselize注释)然后强制转换为旧对象变成新的(是不是就是这样?)。
答案 0 :(得分:2)
因此,总的来说,你的问题是你需要发送一个库对象的实例;但要发送它,它需要实现一个接口。正确的吗?
使用Java / Kotlin互操作有几种方法可以做到这一点,但它们都不是特别原创的。实际上,你很幸运,你正在使用的库也不是用Kotlin编写的,因为Kotlin类默认是final
。另一方面,Java类不是;这就是为什么你能做这样的事情:
MySerialPort.kt
class MySerialPort : UsbSerialPortImpl(), Parcelable {
...
}
当然,这是假设一些事情:
您正在使用库中的UsbSerialPort
实现。毕竟,你链接的类是一个接口,而不是一个具体的类。你必须从某处获得一个具体的类才能初始化它,所以我假设它是一个库类。
UsbSerialPortImpl
课程不是final
。如上所述,这(幸运的是)不是Java中的默认值,所以你可能很好。
答案 1 :(得分:2)
我希望将串口发送到另一个活动(这是因为我无法从地址重新创建串口对象)。
不幸的是,要实现Parcelable
,您需要做到这一点:告诉Android如何将一些数据写入Parcel
以及如何从数据中重新创建此对象。
@Parcelize
不会改变这个要求,它只是告诉编译器以标准方式生成这些方法。
要访问无法重新创建的“实时”对象,请扩展Binder
(请参阅https://developer.android.com/guide/components/bound-services#Binder以获取Java中的示例)。现在,您可以在实施Binder
时在Parcel
中存储Parcelable
。