先說(shuō)我的應(yīng)用場(chǎng)景,一塊帶串口的android板子跟一個(gè)外設(shè)通過(guò)串口直接通信,控制這個(gè)外設(shè)的啟停。如圖1(公司規(guī)定不能透露太多,只拍了一部分)
開(kāi)發(fā)必備:
1、開(kāi)源項(xiàng)目
現(xiàn)在關(guān)于android串口通信都是根據(jù)Google提供的開(kāi)源項(xiàng)目在實(shí)現(xiàn)。
Google開(kāi)源項(xiàng)目地址? ? ??
2、了解串口通信流程。
? 流程:打開(kāi)串口(需要配置串口號(hào)和比特率) ---> 寫串口 ---> 讀串口 ---> 關(guān)閉串口
? 注意:1)串口號(hào)來(lái)源:看你的串口線插在哪個(gè)串口上,以圖1為例,如果接的是com1口,那么串口號(hào)我這邊選擇的/dev/ttys0,一次類推。/dev/ttys0是通過(guò)ADReaderInterface.GetSerialPortPath()搜索到的串口路徑。
? ? ? ? ? 2)比特率來(lái)源:接入設(shè)備的波特率有廠商指定。直接跟設(shè)備商要就行。
3、對(duì)jni有一定的了解
?關(guān)于Android 串口的使用google并沒(méi)有向上層開(kāi)源,所以會(huì)用到j(luò)ni去調(diào)用C層的
jni的調(diào)用 網(wǎng)上已經(jīng)很多博客都有講解,自行去百度吧。
項(xiàng)目結(jié)構(gòu)

注:加入jni文件夾,libs文件和src中加入android_serialport_api文件夾(包名一定是這個(gè),不能改)
接下來(lái)就是coding了,按流程來(lái)。
一、配置串口號(hào)和比特率,打開(kāi)串口
1、我這邊是 直接搜索所有的串口號(hào)地址加到spinner中,用戶根據(jù)需求自己選擇。
private static int baudrate = 115200; //波特率

2、打開(kāi)串口
android_serialport_api.SerialPort serialPortMenSuo = null;
serialPortMenSuo = new android_serialport_api.SerialPort(
new File(sn_mensuo.getSelectedItem().toString()),baudrate,0);
注:android_serialport_api.SerialPort 這個(gè)方法在上面復(fù)制進(jìn)來(lái)的src下的SerialPort.java文件下。參數(shù)含義見(jiàn)下圖

二、讀寫數(shù)據(jù)
1、寫數(shù)據(jù)(向串口設(shè)備發(fā)送命令)

把字符串轉(zhuǎn)成字節(jié)數(shù)組。
2、讀數(shù)據(jù)(串口設(shè)備向android設(shè)備發(fā)送數(shù)據(jù))

IDateDeal是一個(gè)自定義接收數(shù)據(jù)的接口
private interface IDataDeal {
? ? ? ? public void onDataReceived(byte[] buffer, int size);
}
ReadThread 顧名思義這個(gè)是讀取數(shù)據(jù)的線程

三、關(guān)閉串口

至此 所有的流程都走完了,基本功能也都實(shí)現(xiàn)了。祝各位一切順利....