一.配置
1.下载文件 https://github.com/cepr/android-serialport-api
2.复制android_serialport_api文件夹至app\src\main\java
3.复制jni文件至app\src\main文件夹下
4.复制armeabi armeabi-v7a x86至app\libs
5.在build.gradle 中的android中添加
sourceSets {
main {
jniLibs.srcDirs = ['libs'] //引用libs下的.so文件
}
}
二.代码
private void openSerialPort() {
try {
//android屏不同,使用串口不同 /dev/ttyS0? ttyGS0? ttyAMA0
SerialPort serialPort = new SerialPort(new File("/dev/ttyGS2"), 9600, 0);
inputStream = serialPort.getInputStream();
outputStream = serialPort.getOutputStream();
//监控串口数据
new Thread(){
public void run() {
while(!isInterrupted()) {
try {
Thread.sleep(20);
int count = inputStream.available();
if (count == 0) continue; //没有接收到数据
byte[] buffer = new byte[count];
inputStream.read(buffer);
Log.d("", "接收数据:"+Arrays.toString(buffer));
} catch ( IOException | InterruptedException e) {
e.printStackTrace();
}
}
}
}.start();
} catch (IOException e) {
Log.e("openSerialPort:", e.toString());
}
三.使用电脑进行串口测试
1.电脑安装串口调试助手及相关驱动
2.usb转串口线连接电脑(android端也可以用usb转串口模拟)
3.打开串口调试助手,设置好COM、 波特率等
四.serial_port android6.0或以上text relocations错误解决: 重新编译so文件
4.1 新建一个项目,用于重新编译so文件
4.2下载使用ndk
File -> Project Structure
4.3将jin文件复制到app目录下
jin文件下的Android.mk添加
LOCAL_LDFLAGS += -fPIC
4.4在build.gradle文件中添加
externalNativeBuild {
ndkBuild {
path 'jni/Android.mk'
}
}
4.5 make project
编译完成,在build/intermediates下发现以下文件(各平台使用的libserial_port.so文件)
4.6 复制local下的文件替换目标项目app\libs下的so文件
五.异常记录
异常状况1:
小概率在启动后, 数据能发送到android端, 从android端发送不出去;
此时重新启动串口时卡住, 过一段时间就好了,运行正常;
原因:
android启动时耗用了大部分资源,此时自启动程序、串口,可能因为卡住导致串口启动异常;
解决方式:
app自启动延时、串口再相对app启动延时。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)