AndroidSerialPort
Android 串列埠通訊,基於谷歌官方android-serialport-api編譯
github地址:github.com/AIlll/Andro…
使用說明
- 在Module下的 build.gradle 中新增
//最新版本檢視github專案
implementation 'com.aill:AndroidSerialPort:x.x.x'
複製程式碼
- 開啟串列埠
/**
* @param 1 串列埠路徑
* @param 2 波特率
* @param 3 flags 給0就好
*/
SerialPort serialPort = new SerialPort(new File("/dev/ttyS1"), 9600, 0);
複製程式碼
- 往串列埠中寫入資料
//從串列埠物件中獲取輸出流
OutputStream outputStream = serialPort.getOutputStream();
//需要寫入的資料
byte[] data = new byte[x];
data[0] = ...;
data[1] = ...;
data[x] = ...;
//寫入資料
outputStream.write(data);
outputStream.flush();
複製程式碼
- 讀取串列埠資料
讀取資料時很可能會遇到分包的情況,即不能一次性讀取正確的完整的資料
解決辦法:可以在讀取到資料時,讓讀取資料的執行緒sleep一段時間,等待資料全部接收完,再一次性讀取出來。這樣應該可以避免大部分的分包情況
//從串列埠物件中獲取輸入流
InputStream inputStream = serialPort.getInputStream();
//使用迴圈讀取資料,建議放到子執行緒去
while (true) {
if (inputStream.available() > 0) {
//當接收到資料時,sleep 500毫秒(sleep時間自己把握)
Thread.sleep(500);
//sleep過後,再讀取資料,基本上都是完整的資料
byte[] buffer = new byte[inputStream.available()];
int size = inputStream.read(buffer);
}
}
複製程式碼
- 修改裝置
su
路徑
開啟串列埠時,會檢測讀寫許可權,當沒有許可權時,會嘗試對其進行提權
//預設su路徑是/system/bin/su,有些裝置su路徑是/system/xbin/su
//在new SerialPort();之前設定su路徑
SerialPort.setSuPath("/system/xbin/su");
複製程式碼
- ByteUtil類:工具類,字串轉位元組陣列,位元組陣列轉字串
- SerialFinder類:用於查詢裝置下所有串列埠路徑
github地址:github.com/AIlll/Andro… ,如對你有幫助,求給個start哦,如有問題以及更好的建議,歡迎提出來相互交流