在Android应用中,我需要特定的USB设备(已知的供应商/产品ID)的许可,该设备已永久插入Android设备。
到目前为止,我已经进行了以下观察:
是否可以确保只显示一次权限弹出窗口? (尤其是在重新启动Android设备并且USB设备保持插入状态的情况下)
注意:该应用程序未安装在系统文件夹中,因此无法使用MANAGE_USB权限。
解决方案是使用意图过滤器,并在关联的活动上添加android:directBootAware="true"
属性,以便在启动后正确接收USB_DEVICE_ATTACHED
事件。
旧答案
如果设备已植根,则解决方案是:
使用意图过滤器请求许可
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);
}
}
如果设备未植根,则找不到任何解决方案。
无法获得持久的USB许可,,因为重新启动选项通常会强制停止所有操作,这也会导致USB也被拔出。
有一种可能要求重启时重新插入USB。是否可以确保仅显示一次权限弹出窗口?
否
因为如果您正在连接USB,这会导致死锁情况,因为它们会导致插头拔出,而不是打扰系统。因此无法使其成为USB插入的。