android 4步操作为app添加串口功能
之前开发过的android程序想添加串口功能,让team同事去处理,找了些资料,更新程序后把竞然把NDK功能也添加了进来,本来简单的一个程序变了杂乱许多,所以简记一下串口功能。git android串口通讯url:https://github.com/cepr/android-serialport-api,开源项目已十年未更新,一定未被超越。环境:mac os开发环境:android studio
之前开发过的android程序想添加串口功能,找了些资料,更新程序后把把NDK功能也添加了进来,简单的一个程序变了杂乱许多,所以简记一下串口功能。
git android串口通讯url:https://github.com/cepr/android-serialport-api,开源项目已十年未更新。
环境:mac os
开发环境:android studio 4.1
CMake:Android Studio 编译原生库的默认构建工具,可与 Gradle 搭配使用来构建原生库。
使用CMake为项目添加串口通讯功能只需四步,其实四步就足够:
1:创建jni文件夹:(文件在app目录下创建,右键->new->folder->jni)
加入SerialPort.c,和SerialPort.h文件,
文件url:https://github.com/cepr/android-serialport-api/tree/master/android-serialport-api/project/jni
2:创建java:package:android_serialport_api,加入SerialPort.java,SerialPortFinder.java文件,文件url:https://github.com/cepr/android-serialport-api/tree/master/android-serialport-api/project/src/android_serialport_api
3:创建cmakefile文件
cmake_minimum_required(VERSION 3.4.1)
add_library( # Sets the name of the library.
serial_port
# Sets the library as a shared library.
SHARED
# 此处路径需与本地路径相同
src/main/jni/SerialPort.c )
find_library( # Sets the name of the path variable.
log-lib
# Specifies the name of the NDK library that
# you want CMake to locate.
log )
target_link_libraries( # Specifies the target library.
serial_port
# Links the target library to the log library
# included in the NDK.
${log-lib} )
4:修改项目build.gradle文件,为项目加入c编译功能:添加两项属性,
1:defaultConfig下
externalNativeBuild {
cmake {
cppFlags ""
}
}
2:defaultConfig同层次
externalNativeBuild {
cmake {
path "CMakeLists.txt"
}
}
添加完成会有个gradle:configure project的过程。
============================
测试方法如下:
//初始化串口
private void initComPort() {
Log.e("TAG", "-------初始化串口");
mCom = new SerialControl();
//设置读取串口,每个设备不同。
mCom.setPort("/dev/ttyS4");
mCom.setBaudRate("115200");
}
//开启串口
private void openComPort() {
try {
mCom.open();
Log.e("TAG", "-------开启串口");
} catch (SecurityException e) {
Log.i(TAG, "打开串口失败:没有串口读/写权限!");
} catch (IOException e) {
Log.i(TAG, "打开串口失败:未知错误!");
} catch (InvalidParameterException e) {
Log.i(TAG, "打开串口失败:参数错误!");
}
}
//关闭串口
private void closeComPort() {
Log.e("TAG", "------------关闭串口");
if (mCom != null) {
mCom.stopSend();
mCom.close();
}
}
private class SerialControl extends SerialHelper {
public SerialControl() {
}
//接收数据处理
@Override
protected void onDataReceived(final String receiveData) {
Log.e("SerialInfo",receiveData);
}
}
private void sendSerialMessage(String sendData) {
mCom.send(ByteUtils.hexStr2Byte(sendData));
}
单纯使用会是比较简单的。其实是底层c编译和串口交互,拿到串口的输出输入流对象,然后对串口进行收发控制。注:8.0以上在AndroidManifest.xml里加上 android:process=“system” android:sharedUserId=“android.uid.system”
更多推荐
所有评论(0)