我使用UsbSerialForAndroid库实现到设备的串口连接。
我需要跨活动发送一个serial port
对象。UsbSerialPort的定义是这里。
目前,我的代码能够在putExtra
方法Intent
的帮助下返回指定端口地址的字符串。我希望将serial port
发送到其他活动(这是因为我无法从地址重新创建串行端口对象)。
为了将对象与Intent
一起发送,该对象应该是可封装的。但是原始的库类文件是在java中。
如何在这样一个预先存在的java类上实现parcelable?我更喜欢用kotlin语言来达到这个目的。
编辑
一个似乎合乎逻辑的选项是使用原始 SerialUsbPort
类作为基类,并将新类扩展为parcelable (带有@Parselize注释),然后将旧对象转换为新(这是对的吗?)
发布于 2018-05-13 14:20:49
我希望将串行端口发送到其他活动(这是因为我无法从address重新创建串口对象)。
不幸的是,要实现Parcelable
,您需要做到以下几点:告诉Android如何将一些数据写入Parcel
,以及如何从数据中重新创建该对象。
@Parcelize
没有改变这个要求,它只是告诉编译器以标准的方式生成这些方法。
若要访问无法重新创建的“活动”对象,请扩展Binder
(参见https://developer.android.com/guide/components/bound-services#Binder中的一个示例)。现在,您可以在实现Binder
时将Parcel
存储在Parcelable
中。
发布于 2018-05-13 12:02:37
因此,总之,您的问题是需要发送库对象的实例;但是要发送它,则需要实现接口。对,是这样?
有几种使用Java/Kotlin互操作的方法,但没有一种是特别原创的。实际上,幸运的是,您使用的库也不是用Kotlin编写的,因为Kotlin类默认是final
。另一方面,Java类不是;这就是为什么您能够这样做的原因:
MySerialPort.kt
class MySerialPort : UsbSerialPortImpl(), Parcelable {
...
}
当然,这是假定了以下几点:
UsbSerialPort
实现。毕竟,您链接的类是一个接口,而不是一个具体的类。您必须从某个地方获得一个具体的类才能初始化它,所以我假设它是一个库类。UsbSerialPortImpl
类不是final
。如前所述,这(对您来说很幸运)不是Java中的默认设置,所以您可能很好。https://stackoverflow.com/questions/50319761
复制