一、引用
二、截图
废话不多说,先上图,micro usb -> usb 连接的测试温度的外设(其实是个测试粮油品质的,还有TPM值等等)
usb_connect.png
三、流程
1、mainfest中注册监听USB拔插动作并且过滤对应vid,pid的设备。这个是静态的,在下面实例中用的是动态的,具体可以参考引用中的第【2】个。
2、查找所有的USB设备
3、动态注册需要用的USB设备权限
4、连接已注册的USB设备,并设置连接参数
5、设置返回监听,并对话
6、按照不同的协议解析byte[]数据获得对应数据(在此不表)
7、关闭连接等
四、代码
0、配置:git上的案例,把其中usbSerialForAndroid的这个module拿下来,关联到自己的工程上面去
build.gradle-app
dependencies {
compile project(':usbSerialForAndroid')
}
settings.gradle
include ':app', 'usbSerialForAndroid'
1、动态监听USB拔插动作+USB注册动作
private String USB_PERMISSION = "xxxxxxxxxx.usb.permission";
private PendingIntent mPrtPermissionIntent; //获取外设权限的意图
/**
* 动态注册usb广播,拔插动作,注册动作
* */
private void register(){
//注册在此service下的receiver的监听的action
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
intentFilter.addAction(UsbManager.ACTION_USB_ACCESSORY_ATTACHED);
intentFilter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
intentFilter.addAction(USB_PERMISSION);
registerReceiver(usbReceiver, intentFilter);//注册receiver
//通知监听外设权限注册状态
//PendingIntent:连接外设的intent
//ask permission
mPrtPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(USB_PERMISSION), 0);
}
private BroadcastReceiver usbReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (intent == null) {
return;
}
String action = intent.getAction();
// USB注册动作
if (USB_PERMISSION.equals(action)) {
synchronized (this) {
if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) {
if ((UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE) !