公司的项目是要做一个应用于工厂的一个物理网系统,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. 箭头函数的基础使用
  2. Python技巧匿名函数、回调函数和高阶函数
  3. android 拼音字母搜索联系人以及实现多选功能
  4. Android4.4.2 获取NTP时间,并设置系统时间
  5. [转]Android(安卓)Power Management
  6. Android中调用C++函数的一个简单Demo
  7. 谈谈 Android(安卓)中的 PathClassLoader 和 DexClassLoader
  8. opengl
  9. android JNI 调用

随机推荐

  1. 使用多状态按钮ToggleButton
  2. Android代码速查,写给新手的朋友们
  3. Android Binder 系统级使用demo
  4. Android性能优化案例研究
  5. Android 强制设置横屏或竖屏
  6. android4.0创建AVD后,打开虚拟机黑屏问题
  7. Android下Speex库除0错误(SIGFPE)排除
  8. and 使用以及添加一个自己的mime type在C
  9. 《H5 App开发》判断当前环境是Android还
  10. Android构建报错:Android resource linkin