之前写的东西太乱了,最近再次使用的时候发现本可以很简单的。
=================
首先,建一个android工程,选上Include c++ support选项。
之所以这样做是因为,这样会生成一个CMakeLists.txt的文件,后面我们会修改这个文件。
在工程目录app\src\main\cpp中有一个文件名文native-lib.cpp的文件,其中CMakeLists.txt就是编译这个cpp文件的依据。
如果我们加入工程的cpp文件或者c文件名字不同,则需要修改CMakeLists.txt的内容。
------------------------------------------------
其次,加入android-serialport-api类中的2个文件,文件名是SerialPort.java和SerialPortFinder.java。
再写一个自己使用或者说测试用的类。
public class MySerialPort { private static Context mContext; private static SerialPort mSerialPort; private static InputStream mInputStream; private static OutputStream mOutputStream; public MySerialPort(Context ctx) { mContext = ctx; } public static void openSerialPort(Context ctx) { if (mSerialPort == null) { try { /* Open serial port */ mSerialPort = new SerialPort(new File("/dev/ttyAMA4"), 115200, 0); mOutputStream = mSerialPort.getOutputStream(); mInputStream = mSerialPort.getInputStream(); /* Start read serial port thread */ mOutputStream.write('a'); new RecvThread().start(); } catch (IOException e) { Toast.makeText(ctx, "打开失败", Toast.LENGTH_SHORT).show(); e.printStackTrace(); } } else { /* Close serial port */ mSerialPort.close(); mSerialPort = null; } } public void close() { mSerialPort.close(); mSerialPort = null; } private static class RecvThread extends Thread { @Override public void run() { super.run(); //接收的数据处理 } }
}
------------------------------------------------
再次,只要在MainActivity中调用自己自定义的MySerialPort即可。
如:
MySerialPort mySerialPort = new MySerialPort(this); mySerialPort.openSerialPort(this);
------------------------------------------------
最后,也是很重要的.c文件和.h文件 文件名是serial_port.c
#include "termios.h" #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <string.h> #include <jni.h>