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

时间:2019-01-30 15:56:27

标签: android android-usb

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

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

  • 在使用UsbManager.requestPermission()时,重新插入/重新引导时权限被取消,并且弹出窗口的复选框似乎对此行为完全没有作用
  • using intent filters时,重新插入USB设备时(即使在重新启动后重新插入,如果选中了弹出窗口的复选框,则)将重新正确授予该权限。但是在重新启动后,该重新授予权限不会被授予除非我拔出并重新插入USB设备

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

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

2 个答案:

答案 0 :(得分:2)

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

  • 使用意图过滤器请求权限
  • 使用以下代码在重新启动或启动应用程序时模拟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);
        }
    }
    

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

答案 1 :(得分:0)

无法保留USB权限, ,因为重新启动选项通常会强制停止所有操作,因此也会拔掉USB。

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

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

因为如果您要连接USB,这会导致死锁,以至于造成它们被拔出,而不是打扰系统。

因此无法将其插入USB。