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


  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android 应用中获取 USB 权限,需要在应用的 AndroidManifest.xml 文件中声明一个 `<uses-feature>` 标签,指定应用需要使用 USB 设备。同时还需要申请 USB 权限,可以在应用中调用 `UsbManager.requestPermission()` 方法来实现。 以下是一个示例代码,演示如何获取 USB 设备的权限: ```java // 在AndroidManifest.xml文件中添加以下权限声明 <uses-feature android:name="android.hardware.usb.host" /> // 在应用中获取USB设备的权限 public void getUsbPermission(UsbDevice device) { if (device != null) { UsbManager usbManager = (UsbManager) getSystemService(Context.USB_SERVICE); PendingIntent permissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); usbManager.requestPermission(device, permissionIntent); } } // USB设备权限申请结果的广播接收器 private final BroadcastReceiver usbPermissionReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (ACTION_USB_PERMISSION.equals(action)) { synchronized (this) { UsbDevice device = (UsbDevice) intent.getParcelableExtra(UsbManager.EXTRA_DEVICE); if (intent.getBooleanExtra(UsbManager.EXTRA_PERMISSION_GRANTED, false)) { if (device != null) { // 成功获取USB设备的权限,可以进行后续操作 } } else { // 未能获取USB设备的权限 } } } } }; ``` 注意,获取 USB 设备权限需要用户授权,因此在申请权限之前需要先向用户说明该应用需要使用 USB 设备,以获得用户的同意。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值