首先,把com.friendlyarm.AndroidSDK包(自己下载)添加到项目中。
//打开串口,返回串口描述符fd
fd = HardwareControler.openSerialPort(choose_serialport,choose_baudrate, choose_databits, choose_stopbit);
if (fd != -1) {//打开成功
new readThread().start();//开始串口的监听线程
} else {//打开失败
}
//关闭串口操作
HardwareControler.close(fd);
读取串口信息操作:
Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.arg1) {
case 0:
int len=HardwareControler.read(fd, buf, 300); //读取串口
byte[] hexbuf =new byte[300];
byteToHex(buf, hexbuf, len);
String bufstring = new String(buf, 0, len);
String hexstring = toHex(bufstring); //16进制
//在这里进行数据的处理
new readThread().start();//处理完消息后立即开启监听线程
break;
case 1:
HardwareControler.setLedState(1, 0);
new readThread().start();
Log.d("readThread","没有数据,新线程启动");
break;
default:
break;
}
}
};
//读取串口信息线程
public class readThread extends Thread {
public void run(){
Message msg = new Message();
HardwareControler.setLedState(0, 0);
if (HardwareControler.select(fd,5, 0)==1) { //有数据可读
msg.arg1 = 0;
} else if (HardwareControler.select(fd,5, 0)==0) { //无数据可读
msg.arg1 = 1;
HardwareControler.setLedState(0, 1);
} else { //出错
msg.arg1 = -1;
}
handler.sendMessage(msg);
}
}
往串口里写数据:
HardwareControler.write(fd, bytebuf); //bytebuf为写入的数据,byte[]类型
//设置循环发送定时器
Handler handler2 = new Handler() {};
Runnable runnable=new Runnable(){
@Override
public void run() {
// TODO Auto-generated method stub
//要做的事情
handler2.postDelayed(this, Long.parseLong(time) ); //time为循环发送的时间间隔
}
};
注意,在执行上述的循环发送数据操作后,还需执行新的发送数据操作或者退出时都要先执行handler2.removeCallbacks(runnable)语句,否则之前的循环发送操作则会不断的执行。