前一段時間學了一下Android的序列槽通信,略有所成。又想起未來也許還有好多人要學習這個。就把我這個demo貢獻出來抛磚引玉。話不多說 來看代碼
這個需要配置jni 如果不會的 可以看這篇文章 jni配置 CMake方式
項目整體結構、
這上面的 1是底層的C語言和c頭檔案,這些都是谷歌寫好的,我們不用管,2 也是谷歌寫好的java代碼,
SerialPort 裡面有兩個本地方法
// JNI
private native static FileDescriptor open(String path, int baudrate, int flags);
public native void close();
open是打開序列槽,close就是關閉, 至于open裡面的參數我們怎麼寫 在下面可以看見。還有 你導入的話,通常來說open是紅色的 也就是Android studio會提醒你有錯,這個不用管,這是Android studio 的錯誤 樓主當時在這裡糾結老長時間了。。。。。強迫症 不能忍的。。。
如果 你非要看着這個紅色字 不爽的話,打開setting
把NDK Support 去掉√就行了。
還有兩個方法
//獲得輸入流
public InputStream getInputStream() {
return mFileInputStream;
}
//獲得輸出流
public OutputStream getOutputStream() {
return mFileOutputStream;
}
SerialPortFinder 這個類是用來掃描Android 上面序列槽的 ,他有一個public String[] getAllDevices() 這是用來傳回所有的序列槽名字的,雖然 我們也可以不用他 ,直接取路徑。但是有備無患哈哈。** String[] getAllDevicesPath()** 這個就是傳回所有的序列槽路徑了。和上面的方法是一一對應的。 在Android裡面 就把序列槽 當成一個file
說完上面的 ,就還有DevicePre 這是我寫的一個PreferenceFragment 用來快速儲存你選擇的序列槽配置 這是重要代碼。
entries = mSerialPortFinder.getAllDevices();
entryValues = mSerialPortFinder.getAllDevicesPath();
3 CMakeLists.txt 這個是配置CMake的 ,以前Android 上面都是kv 現在 是CMake的天下了。
這個也是jni。
項目gradle裡面要配置
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
externalNativeBuild {
cmake {
cppFlags ""
}
}
SerialPortFunction這個類是我封裝的序列槽通信工具類,可以控制打開序列槽,關閉序列槽,向序列槽發送資料,接受序列槽的資料。
ReadSerialPort 這個類是我寫的一個Runnable 用來讀取序列槽的inputstream 從中解析資料。每個序列槽裝置的資料解析規則不一樣,是以我這裡的 到你那裡可以能就不适用了。解析規則得要你自己寫
ReadSerialPort 有一個内部接口
interface DataWeight {
void weight(String weight);
}
weight 方法傳回解析的資料
好了 附上代碼 https://github.com/planitian/JNIDate 大家如果感覺還可以的 可以star一下