重新启动后仍保留USB权限,而无需重新插入设备

问题描述 投票:7回答:2

在Android应用中,我需要特定的USB设备(已知的供应商/产品ID)的许可,该设备已永久插入Android设备。

到目前为止,我已经进行了以下观察:

  • [当使用UsbManager.requestPermission()时,重新插入/重新引导时权限被取消,并且弹出窗口的复选框似乎对此行为完全无效
  • [using intent filters时,在重新插入USB设备时(即使在重新启动后重新插入,如果选中了弹出窗口的复选框也是如此),则正确地重新授予了许可)但是,除非我拔出&重新插入USB设备

是否可以确保只显示一次权限弹出窗口? (尤其是在重新启动Android设备并且USB设备保持插入状态的情况下)

注意:该应用程序未安装在系统文件夹中,因此无法使用MANAGE_USB权限。

android android-usb
2个回答
3
投票
更新

解决方案是使用意图过滤器,并在关联的活动上添加android:directBootAware="true"属性,以便在启动后正确接收USB_DEVICE_ATTACHED事件。

旧答案

如果设备已植根,则解决方案是:

使用意图过滤器请求许可

  • 使用以下代码在重新启动或启动应用程序时模拟USB设备的重新插入:
  • static void replugUsb() { Log.d(LOG_TAG, "replugUsb()"); try{ Process su = Runtime.getRuntime().exec("su"); DataOutputStream outputStream = new DataOutputStream(su.getOutputStream()); outputStream.writeBytes("echo 0 > /sys/bus/usb/devices/usb1/authorized\n"); outputStream.flush(); outputStream.writeBytes("echo 1 > /sys/bus/usb/devices/usb1/authorized\n"); outputStream.flush(); outputStream.writeBytes("exit\n"); outputStream.flush(); su.waitFor(); }catch(IOException | InterruptedException e){ Log.e(LOG_TAG, "replugUsb: failed", e); } }

如果设备未植根,则找不到任何解决方案。


0
投票

无法获得持久的USB许可,,因为重新启动选项通常会强制停止所有操作,这也会导致USB也被拔出。

有一种可能要求重启时重新插入USB。

是否可以确保仅显示一次权限弹出窗口?

因为如果您正在连接USB,这会导致死锁情况,因为它们会导致插头拔出,而不是打扰系统。因此无法使其成为USB插入的。
© www.soinside.com 2019 - 2024. All rights reserved.