关于安卓串口开发,这篇文章写的比较明白:
https://blog.csdn.net/qq_35952946/article/details/78863871
但是用这个方案代码会报错:
java.lang.UnsatisfiedLinkError: dlopen failed: ××××.so: has text relocations
这个因为编译的 so 文件太旧了。
下面的示例源码中,修改了上述问题,并提供演示示例,可正常运行。
使用方法:
获取串口列表
SerialPortFinder serialPortFinder = new SerialPortFinder(); return serialPortFinder.getAllDevices();
打开/关闭串口:
///dev/ttyS1后面的数字1,是串口编号,根据实际情况修改 final SerialPortUtils portUtils = new SerialPortUtils("/dev/ttyS1",57600,0); portUtils.openSerialPort();
portUtils.closeSerialPort();
处理收到的数据:
//串口数据监听事件 portUtils.setOnDataReceiveListener(new SerialPortUtils.OnDataReceiveListener() { byte[] mBuffer; Handler handler = new Handler(); @Override public void onDataReceive(byte[] buffer, int size) { Log.d(TAG, "收到数据:" + Byter.byteToHex(buffer)); // //在线程中直接操作UI会报异常:ViewRootImpl$CalledFromWrongThreadException //解决方法:handler // mBuffer = buffer; handler.post(runnable); } //开线程更新UI Runnable runnable = new Runnable() { @Override public void run() { recvContent.setText("size:"+ String.valueOf(mBuffer.length)+"数据监听:"+ Byter.byteToHex(mBuffer)); } }; });
代码文件稍后上传