关于安卓串口开发,这篇文章写的比较明白:
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));
}
};
});
代码文件稍后上传
原文:https://www.cnblogs.com/lifang-biz/p/11770299.html