Android中串口通讯的问题
16lz
2021-01-23
公司的项目是要做一个应用于工厂的一个物理网系统,android方面需要应用到串口通讯 .通过上网查询到Google官方api,当时为了快速,把这个demo 依赖了
在application里面生成了getSerialPort() 函数,用来获取到SerialPort 对象 都是调用api中的 .so 文件中open函数。
public SerialPort getSerialPort(String deviceName) throws SecurityException, IOException, InvalidParameterException { if (mSerialPort == null) { String packageName = getPackageName(); SharedPreferences sp = getSharedPreferences(packageName + "_preferences", MODE_PRIVATE);// int baudRate = Integer.decode(sp.getString("BAUDRATE", "-1")); int baudRate = 9600; if ((deviceName.length() == 0) || (baudRate == -1)) { throw new InvalidParameterException(); } mSerialPort = new SerialPort(new File(deviceName), baudRate, 0); } return mSerialPort; } public void closeSerialPort() { if (mSerialPort != null) { mSerialPort.close(); mSerialPort = null; } }
然后可以写一个专门用于串口通讯的基类。
public abstract class SerialPortActivity extends AppCompatActivity { String TAG = "===== 串口通讯Activity界面 ="; protected MyApp mApplication; protected SerialPort mSerialPort; protected OutputStream mOutputStream; private InputStream mInputStream; private ReadThread mReadThread; String deviceName = "/dev/ttyS1"; private class ReadThread extends Thread { @Override public void run() { super.run(); while (!isInterrupted()) { int size; try { byte[] buffer = new byte[1024]; if (mInputStream == null) { return; } size = mInputStream.read(buffer); if (size > 0) { onDataReceived(buffer, size); } } catch (IOException e) { e.printStackTrace(); return; } } } } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mApplication = (MyApp) getApplication(); try { mSerialPort = mApplication.getSerialPort(deviceName); mOutputStream = mSerialPort.getOutputStream(); mInputStream = mSerialPort.getInputStream();/* Create a receiving thread */ mReadThread = new ReadThread(); mReadThread.start(); } catch (SecurityException e) { Toast.makeText(mApplication, "您没有串口的读写权限", Toast.LENGTH_SHORT).show(); } catch (IOException e) { Toast.makeText(mApplication, "您没有串口的读写权限", Toast.LENGTH_SHORT).show(); } catch (InvalidParameterException e) { Toast.makeText(mApplication, "请先配置串口参数", Toast.LENGTH_SHORT).show(); } Log.e(TAG, " 获取输入流 = " + mInputStream); Log.e(TAG, " 获取输出流 = " + mOutputStream); } protected abstract void onDataReceived(final byte[] buffer, final int size); @Override protected void onDestroy() { if (mReadThread != null) mReadThread.interrupt(); mApplication.closeSerialPort(); mSerialPort = null; super.onDestroy(); }}
通过log 打印出来的只要执行到了open()函数,并且输入输出流不为空 ,那串口通讯就基本完成,剩下的就是和单片机或者
串口模拟助手之间数据的交换了.
更多相关文章
- Android中调用C++函数的一个简单Demo
- Android笔记之adb命令应用实例1(手机端与PC端socket通讯上)
- Android开发板之串口开发
- 使用android中drawline函数无法绘制水平线的解决办法
- Android与Arduino的USB通讯实验(1)
- Android串口通讯开发整理
- android手机通过串口蓝牙透传模块与AVR单片机通信实例。。。蓝牙
- 【android】读取通讯录
- android 获取通讯录联系人信息