天天看点

USB权限动态获取

起因是公司正在写的一款外置身份证读卡器,连接的到Android系统的访客机,通过读卡器产商给出的demo,因为读卡器是外置的,所以一开始并不知道为什么每次访客机设备断电后再启动的话,运行demo就得重新插拔一次才能重新获取权限,这个情况在打印机的时候也有类似问题,后来通过查阅资料,发现了一个有用的方法,已经自测通过。

动态设置身份证读卡器权限,Android系统5.1.1,

代码部分:

public void usbPermission(){
    final String ACTION_USB_PERMISSION =
            "com.android.example.USB_PERMISSION";
    UsbManager mUsbManager = (UsbManager)mContext.getSystemService(Context.USB_SERVICE);
    PendingIntent mPermissionIntent = getBroadcast(mContext, 0, new Intent(ACTION_USB_PERMISSION), 0);
    HashMap<String,UsbDevice> deviceHashMap = mUsbManager.getDeviceList();
    Iterator<UsbDevice> iterator = deviceHashMap.values().iterator();
    while (iterator.hasNext()) {
        UsbDevice device = iterator.next();
        //先判断是否为自己的设备
        //注意:支持十进制和十六进制
        //比如:device.getProductId() == 0x04D2
        if(device.getProductId() == 50010 && device.getVendorId() == 1024) {
            if(mUsbManager.hasPermission(device)) {
                //有权限
            } else {
                mUsbManager.requestPermission(device,mPermissionIntent);
            }
        }
    }

}      

其中,productId和vendorId应该是身份读卡设备统一的,在使用身份证读卡器功能代码前加入这个,可以直接设置到设备权限,不用担心会有弹窗提示权限等问题,也不会莫名奇妙(其实就是权限没有)设备初始化失败。

继续阅读