【问题标题】:Grant USB permissions as device owner作为设备所有者授予 USB 权限
【发布时间】: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 设置的。

【问题讨论】:

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

标签: android android-usb android-management-api android-enterprise


【解决方案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 权限(我已经在我的问题中提到了这种方法)
猜你喜欢
  • 2021-01-16
  • 1970-01-01
  • 2013-04-30
  • 2015-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-17
相关资源
最近更新 更多