天天看點

android CMake 序列槽通信demo

前一段時間學了一下Android的序列槽通信,略有所成。又想起未來也許還有好多人要學習這個。就把我這個demo貢獻出來抛磚引玉。話不多說 來看代碼

這個需要配置jni 如果不會的 可以看這篇文章 jni配置 CMake方式

項目整體結構、

android CMake 序列槽通信demo

這上面的 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 的錯誤 樓主當時在這裡糾結老長時間了。。。。。強迫症 不能忍的。。。

android CMake 序列槽通信demo

如果 你非要看着這個紅色字 不爽的話,打開setting

android CMake 序列槽通信demo

把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。

android CMake 序列槽通信demo
android CMake 序列槽通信demo

項目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一下