轉(zhuǎn)載請說明出處!
作者:kqw攻城獅
出處:個(gè)人站 | CSDN
串口通信偏向嵌入式一點(diǎn),是Android設(shè)備通過串口與其他設(shè)備進(jìn)行通信的一種方式,本文介紹的Android純串口的通信,并不是手機(jī)上的USB串口通信。
P1
手機(jī)上是沒有這個(gè)串口的哦。
關(guān)于串口通信,Google已經(jīng)給出了源碼,地址在GitHub android-serialport-api
四年前的代碼,還是Eclipse工程,本文主要介紹如何在Android Studio中使用。
源碼地址在 KqwSerialPortDemo
集成
Java層的代碼,Google已經(jīng)給封裝在 SerialPort.java
導(dǎo)入.so
沒有什么難度了,將so導(dǎo)入到項(xiàng)目
P1
導(dǎo)入jni文件
在main
目錄下創(chuàng)建cpp
文件夾,并將jni源文件和CMakeLists.txt導(dǎo)入
P2
在build.gradle
配置cmake
路徑。
android {
……
externalNativeBuild {
cmake {
path "src/main/cpp/CMakeLists.txt"
}
}
……
}
修改jni源文件
這里要注意jni文件函數(shù)名的寫法:Java_包名_類名_方法名
P3
在將源碼里的jni導(dǎo)入過來的時(shí)候,包名是源碼Demo的包名,我們在自己的工程里要換成自己的包名、類名,源文件和頭文件都要記得改。
修改CMakeLists.txt與SerialPort.java
CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)
add_library(SerialPort SHARED
SerialPort.c)
# Include libraries needed for libserial_port lib
target_link_libraries(SerialPort
android
log)
SerialPort.java
static {
System.loadLibrary("SerialPort");
System.loadLibrary("serial_port");
}
使用
基類
需要使用串口通信的類繼承 SerialPortActivity.java
打開串口
- 端口號(hào):/dev/ttyS2
- 比特率:115200
public SerialPort getSerialPort() throws SecurityException, IOException, InvalidParameterException {
if (mSerialPort == null) {
mSerialPort = new SerialPort(new File("/dev/ttyS2"), 115200, 0);
}
return mSerialPort;
}
關(guān)閉串口
public void closeSerialPort() {
if (mSerialPort != null) {
mSerialPort.close();
mSerialPort = null;
}
}
發(fā)送數(shù)據(jù)
Message message = Message.obtain();
message.obj = text.getBytes();
sendingHandler.sendMessage(message);
接收消息
@Override
protected void onDataReceived(final byte[] buffer, final int size) {
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(mApplication, "收到消息:" + new String(buffer) + " size = " + size, Toast.LENGTH_SHORT).show();
}
});
}
下載并安裝NDK與CMake
下載并安裝NDK與CMake