usb-serial-for-android
在这个项目的基础上我将串口通信的功能封装了起来,用起来更加简单了。
Github传送门:OkUSB
OkUSB
一个简洁的Android串口通信框架。
功能简介
- 支持设置波特率
- 支持设置数据位
- 支持设置停止位
- 支持设置校验位
- 支持DTS和RTS
- 支持串口连接状态监听
用法简介
Gradle
1 2 3 4 5 6 7 8 9 10 11 12
| allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
dependencies { compile 'com.github.zhouzhuo810:OkUSB:1.0.0' }
|
具体用法
1.在AndroidManifest.xml中添加如下特性:
1
| <uses-feature android:name="android.hardware.usb.host" />
|
在需要连接串口的Activity中添加:
1 2 3 4 5 6
| <intent-filter> <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" /> </intent-filter> <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" android:resource="@xml/device_filter" />
|
2.在res文件夹创建xml文件夹,新建device_filter.xml
1 2 3 4 5
| <?xml version="1.0" encoding="utf-8"?> <resources> <usb-device vendor-id="0403" product-id="6001" /> </resources>
|
3.前面都是准备工作,这里才真正使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61
|
usb = new USB.USBBuilder(this) .setBaudRate(115200) .setDataBits(8) .setStopBits(UsbSerialPort.STOPBITS_1) .setParity(UsbSerialPort.PARITY_NONE) .setMaxReadBytes(20) .setReadDuration(500) .setDTR(false) .setRTS(false) .build();
usb.setOnUsbChangeListener(new USB.OnUsbChangeListener() { @Override public void onUsbConnect() { Toast.makeText(MainActivity.this, "conencted", Toast.LENGTH_SHORT).show(); } @Override public void onUsbDisconnect() { Toast.makeText(MainActivity.this, "disconencted", Toast.LENGTH_SHORT).show(); } @Override public void onDataReceive(byte[] data) { tvResult.setText(new String(data, Charset.forName("GB2312"))); } @Override public void onUsbConnectFailed() { Toast.makeText(MainActivity.this, "connect fail", Toast.LENGTH_SHORT).show(); } @Override public void onPermissionGranted() { Toast.makeText(MainActivity.this, "permission ok", Toast.LENGTH_SHORT).show(); } @Override public void onPermissionRefused() { Toast.makeText(MainActivity.this, "permission fail", Toast.LENGTH_SHORT).show(); } @Override public void onDriverNotSupport() { Toast.makeText(MainActivity.this, "no driver", Toast.LENGTH_SHORT).show(); } @Override public void onWriteDataFailed(String error) { Toast.makeText(MainActivity.this, "write fail" + error, Toast.LENGTH_SHORT).show(); } @Override public void onWriteSuccess(int num) { Toast.makeText(MainActivity.this, "write ok " + num, Toast.LENGTH_SHORT).show(); } });
|
4.发送数据
1 2 3
| if (usb != null) { usb.destroy(); }
|
5.如果是Activity,可以在onDestroy中调用如下代码关闭串口。
1 2 3 4 5
| if (usb != null) { usb.destroy(); }
|