作为设备所有者授予 USB 权限

Posted

技术标签:

【中文标题】作为设备所有者授予 USB 权限【英文标题】:Grant USB permissions as device owner 【发布时间】:2019-09-20 20:44:34 【问题描述】:

device owner 可以使用DevicePolicyManager.setPermissionGrantState() 将runtime permissions 授予第三方应用程序以避免用户提示。

但是设备所有者有什么办法也可以授予USB permissions,以便此应用无需用户提示即可访问插入的 USB 设备?

我尝试调用UsbManager.grantPermission()(带有反射),但它引发了SecurityException,因为它需要MANAGE_USB 权限,该权限仅授予系统应用程序(显然不授予设备所有者)。

注意:我正在寻找适用于非 root 和非自定义 android 系统的解决方案,设备所有者应用程序是使用 Android Enterprise provisioning methods 设置的。

【问题讨论】:

看看这里,如果有帮助:***.com/questions/13647547/… @GauravMall 不幸的是,所有建议的答案都需要是系统应用程序 是的,对不起,那个细节刚刚从我脑海中掠过。我不知道怎么做。但是,它对您有帮助吗? @GauravMall 不是真的。令人惊讶的是,这感觉像是一件不可能的事情。 您找到解决方案了吗?即使是 UsbManager.grantPermission()(带反射)也不再适用于带有根系统应用程序的 Android 9 【参考方案1】:

有一个特殊的系统配置可以禁用 USB 权限对话框: https://github.com/aosp-mirror/platform_frameworks_base/blob/8ff4a5a5b510e724b25ac00369696594bb0c9fdc/core/res/res/values/config.xml#L2283

也许您也可以在运行时使用 setprop 以 root 权限更改它。

另一种方式是自定义UsbUserSettingsManager类,具体是这个方法:https://android.googlesource.com/platform/frameworks/base.git/+/master/services/usb/java/com/android/server/usb/UsbUserSettingsManager.java#178

我假设作为设备所有者,您可以完全控制自己的 ROM 源代码。

【讨论】:

不幸的是,这不是自定义 ROM,我没有 root 访问权限。设备所有者应用程序使用标准 provisioning methods 设置。因此我不能使用这些解决方案中的任何一个。 也许您的设备所有者应用程序可以声明适当的意图过滤器,并通过在 UsbManager 上调用 grantDevicePermission() 以获取第三方应用程序的 uid,从而对插入 USB 设备做出反应大大地?这个想法类似于在 onDestroy() 中所做的事情:android.googlesource.com/platform/frameworks/base/+/… 我刚刚尝试过,但不幸的是UsbManager.grantPermission() 方法需要MANAGE_USB 权限,该权限仅授予系统和特权应用程序,而不是设备所有者应用程序。 你有没有找到任何方法在没有操作系统源代码的情况下做到这一点? 有没有人找到一个 adb 道具来切换这个配置参数?看起来它是在构建时内置的,而不是通过 ADB 公开的。【参考方案2】:

它有点旧,但希望它对你有帮助。别的。 我一直在使用它来授予应用程序权限

public boolean setPermissionGrantState (ComponentName admin, 
                String packageName, 
                String permission, 
                int grantState)

链接:https://developer.android.com/reference/android/app/admin/DevicePolicyManager#setPermissionGrantState(android.content.ComponentName,%20java.lang.String,%20java.lang.String,%20int)

【讨论】:

AFAIK 不适用于 USB 权限(我已经在我的问题中提到了这种方法)

以上是关于作为设备所有者授予 USB 权限的主要内容,如果未能解决你的问题,请参考以下文章

USB设备访问弹出抑制?

在颤动中访问外部摄像头时出错 - “用户未授予访问设备的权限”

无法在 TestFlight 上为设备授予构建权限

在真实设备上未授予对照片库的访问权限

系统篇:修改 USB 设备权限

Ubuntu - usb转串口设备的访问权限设置