前一段时间学了一下Android的串口通信,略有所成。又想起未来也许还有好多人要学习这个。就把我这个demo贡献出来抛砖引玉。话不多说 来看代码
项目整体结构、
这上面的 1是底层的C语言和c头文件,这些都是谷歌写好的,我们不用管,2 也是谷歌写好的java代码,
SerialPort 里面有两个本地方法
// JNI
private native static FileDescriptor open(String path, int baudrate, int flags);
public native void close();
open是打开串口,close就是关闭, 至于open里面的参数我们怎么写 在下面可以看见。还有 你导入的话,通常来说open是红色的 也就是Android studio会提醒你有错,这个不用管,这是Android studio 的错误 楼主当时在这里纠结老长时间了。。。。。强迫症 不能忍的。。。
如果 你非要看着这个红色字 不爽的话,打开setting
把NDK Support 去掉√就行了。
还有两个方法
//获得输入流
public InputStream getInputStream() {
return mFileInputStream;
}
//获得输出流
public OutputStream getOutputStream() {
return mFileOutputStream;
}
SerialPortFinder 这个类是用来扫描Android 上面串口的 ,他有一个public String[] getAllDevices() 这是用来返回所有的串口名字的,虽然 我们也可以不用他 ,直接取路径。但是有备无患哈哈。** String[] getAllDevicesPath()** 这个就是返回所有的串口路径了。和上面的方法是一一对应的。 在Android里面 就把串口 当成一个file
说完上面的 ,就还有DevicePre 这是我写的一个PreferenceFragment 用来快速保存你选择的串口配置 这是重要代码。
entries = mSerialPortFinder.getAllDevices();
entryValues = mSerialPortFinder.getAllDevicesPath();
3 CMakeLists.txt 这个是配置CMake的 ,以前Android 上面都是kv 现在 是CMake的天下了。
这个也是jni。
项目gradle里面要配置
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
externalNativeBuild {
cmake {
cppFlags ""
}
}
SerialPortFunction这个类是我封装的串口通信工具类,可以控制打开串口,关闭串口,向串口发送数据,接受串口的数据。
![](/qrcode.jpg)
ReadSerialPort 这个类是我写的一个Runnable 用来读取串口的inputstream 从中解析数据。每个串口设备的数据解析规则不一样,所以我这里的 到你那里可以能就不适用了。解析规则得要你自己写
ReadSerialPort 有一个内部接口
interface DataWeight {
void weight(String weight);
}
weight 方法传回解析的数据
好了 附上代码 https://github.com/planitian/JNIDate 大家如果感觉还可以的 可以star一下