公司的项目是要做一个应用于工厂的一个物理网系统,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()函数,并且输入输出流不为空 ,那串口通讯就基本完成,剩下的就是和单片机或者
串口模拟助手之间数据的交换了.


更多相关文章

  1. Android中调用C++函数的一个简单Demo
  2. Android笔记之adb命令应用实例1(手机端与PC端socket通讯上)
  3. Android开发板之串口开发
  4. 使用android中drawline函数无法绘制水平线的解决办法
  5. Android与Arduino的USB通讯实验(1)
  6. Android串口通讯开发整理
  7. android手机通过串口蓝牙透传模块与AVR单片机通信实例。。。蓝牙
  8. 【android】读取通讯录
  9. android 获取通讯录联系人信息

随机推荐

  1. Android(安卓)OpenCV配置
  2. Android(安卓)scrollTo() scrollBy() Scr
  3. 【Android】创建Popwindow弹出菜单的两种
  4. Android拒绝来电的实现--ITelephony类的
  5. android openGL ES 01
  6. Android(安卓)中导入Gson jar包后出现 ja
  7. 联系人数据库设计之PhotoPriorityResolve
  8. Android中运行时配置环境的改变
  9. Android(安卓)Gallery的使用
  10. android定时任务的实现