起因是公司正在写的一款外置身份证读卡器,连接的到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应该是身份读卡设备统一的,在使用身份证读卡器功能代码前加入这个,可以直接设置到设备权限,不用担心会有弹窗提示权限等问题,也不会莫名奇妙(其实就是权限没有)设备初始化失败。