Android中串口通讯的问题
来源:互联网 发布:apache poi word 编辑:程序博客网 时间:2024/06/05 02:06
公司的项目是要做一个应用于工厂的一个物理网系统,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()函数,并且输入输出流不为空 ,那串口通讯就基本完成,剩下的就是和单片机或者
串口模拟助手之间数据的交换了.
阅读全文
0 0
- Android中串口通讯的问题
- 串口通讯的问题
- 串口通讯的问题
- 串口通讯的延时问题
- Labview中串口通讯的研究
- VB中串口通讯的实现
- Delphi 中串口通讯的实现
- WinCE中串口通讯的调试方法
- Delphi 中串口通讯的实现
- Delphi 中串口通讯的实现
- VB中串口通讯的实现
- Labview中串口通讯的研究
- Android串口通讯开发
- android 串口通讯 JNI
- Android蓝牙串口通讯
- android 串口通讯
- Android串口通讯
- PB中串口通讯
- 自定义View滑动开关
- Windows下获得窗口实例句柄的3种方法
- 4.7 Java中的包 package
- 关于java.sql.SQLException: No suitable driver问题的解决
- 通过拦截器Interceptor优化Mybatis的in查询
- Android中串口通讯的问题
- Java线程池执行的任务抛出异常看不到日志
- Java开发新手上路三个月
- Ubuntu 16.04 apt-get更换为国内阿里云源
- 笔记大全
- 文章标题
- CSV文件介绍 及 文件读写工具类
- HTML标签学习5
- hql语句中用:号的时候怎么用like进行条件查询