android host usb 权限自动获取,【记录】android中想办法实现自动获得usb设备的操作权限 | 在路上...

【记录】android中想办法实现自动获得usb设备的操作权限

2013 年 11 月 7 日 下午 1:57crifan已有5924人围观我来说几句

【问题】

折腾:

【已解决】android程序运行出错:UsbManager(4294): exception in UsbManager.openDevice,java.lang.SecurityException: User has not given permission to device UsbDevice

期间,希望android设备中,自动获得操作usb设备的权限。

不希望弹出对话框让用户点击,才允许有操作权限。

即,不需要用户操心usb操作权限的事情。

【折腾过程】

1.参考:

Android USB Automatically Grant Permission

无解。

2.参考:

How to stop Android asking for permission before permitting access to USB device

去看看:

USB device access pop-up supression?

但是发现:

其解释的内容,就是我之前在:

【已解决】Android设备作为Host希望实现可以检测到USB设备插入

已经知道的的那个

给xml中添加intent-filter的action和meta-data

但是其会存在问题:

静态时,即当app没运行时,插入USB,结果也会导致弹出这个对话框的。

这不是我想要的。

我要实现的是:

app没运行时,插入usb设备,不会弹出这个对话框,不用去烦用户;

app运行时,可以自动获得对应的usb设备的操作权限,无需用户操心权限的事情;

3.而看完了:

USB device access pop-up supression?

的讨论,结果是:

你妹的啊

android系统,必须,至少要有一次,(不论你是用intent-filter还是代码中调用UsbManager.requestPermission)会弹出对话框让用户选择运行程序操作此usb设备的。。

没法消除啊。。。

4.看到android官网文档:

猜想:

不知道,是否有类似的permission的配置而使得可以去配置某usb设备的权限

而实现上面的效果:

无需用户操心usb设备的权限。

5.参考:

bypass android usb host permision confirmation dialog

貌似该人即使可以实现所需的效果:

但是也需要额外的类去实现

而且还需要app是system的app,即放在/system/app/的

甚至那些类所调用的api,可能也会和当前android的os的版本有关:版本变化可能导致api变化。。。

(注:

后来看到这人:

绕过android usb主机permision确认对话框

用中文总结了上面的方案。

通过发帖时间去看,十有八九是该中文作者,拷贝了原帖的代码。。。而不是自己原创的。。。。

)

总之:

还是很麻烦的。

默认的android中,其设计的逻辑中,根本就不支持这类,绕开权限的操作。

所以:

还是放弃此想法吧。。。

【总结】

android设计的逻辑中,不支持这类绕开获取操作权限的事情;

即使像通过代码实现绕开的逻辑,也是很复杂,尤其是还有很多前提条件,所以:

暂且只能放弃绕开权限的想法了。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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 设备,以获得用户的同意。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值