Android Framework

Android USB开发系列一

2017-05-12  本文已影响1942人  CrazyYong

一、先大致了解下Android里关于USB的API,下图很清晰的表示了Android里面USB的树状(图随便画的表介意)

Paste_Image.png

另外还有一个常量<code>UsbConstant</code>定义了跟Linux内核中linux/usb/ch9.h文件定义对应的USB常量

二、获取USB设备步骤

①类似树状图,首先你需要获取UsbManager<code>UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE);</code>
②注册广播,当USB插入或者拔出的时候会有广播通知,还要开启一个
<code>ACTION_USB_PERMISSION</code>的PendingIntent意图:

PendingIntent pendingIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0);
        IntentFilter filter = new IntentFilter(ACTION_USB_PERMISSION);
        filter.addAction(UsbManager.ACTION_USB_DEVICE_DETACHED);
        filter.addAction(UsbManager.ACTION_USB_DEVICE_ATTACHED);
        registerReceiver(mUsbReceiver, filter);

广播:

 private final BroadcastReceiver mUsbReceiver = new    BroadcastReceiver() {
    public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.e( "action", action);
             if (ACTION_USB_PERMISSION.equals(action)) {
                Toast.makeText(MainActivity.this,"获取到权    限",Toast.LENGTH_SHORT).show();
            }else if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(action)) {
                askforpermission();
            } else if (UsbManager.ACTION_USB_DEVICE_DETACHED.equals(action)) {
            }
        } };

③一般情况下我们会对设备进行过滤,只会获取自己想要的设备,获取的方式可以通过过滤UsbDevice实现,主要是通过设备的VendorId以及ProductId进行识别,之后对对应的设备进行权限的申请:

 HashMap<String, UsbDevice> map = usbManager.getDeviceList();
            Log.i("usb", "devicesize:"+String.valueOf(map.size()));

            for(UsbDevice device : map.values()){
                Log.e("device", "vid:"+device.getVendorId()+"   pid:"+device.getProductId()+"   "+device.getDeviceName());
                if(30021 == device.getVendorId() && 1183 == device.getProductId()){
                    usbDevice = device;
                }
            }
            if (usbDevice!=null) {

                if(usbManager.hasPermission(usbDevice))
                {
                    Toast.makeText(MainActivity.this,"已经获取到权限",Toast.LENGTH_SHORT).show();
                }else{
                    usbManager.requestPermission(usbDevice, pendingIntent);
                }
            }
        } catch (Exception e) {
        }
    }
上一篇下一篇

猜你喜欢

热点阅读