Если у вас есть root-доступ к устройству, вы можете использовать несколько найденных мной методов. В приложении вам нужно будет вызвать что-то вроде:
String[] commandConfigValue0 = { "su", "-c", "echo 0 > /sys/bus/usb/drivers/usb/usb1/bConfigurationValue", };
String[] commandConfigValue0 = { "su", "-c", "echo 0 > /sys/bus/usb/drivers/usb/usb1/bConfigurationValue", };
String[] commandConfigValue1 = { "su", "-c", "echo 1 > /sys/bus/usb/drivers/usb/usb1/bConfigurationValue", };
String[] commandAuthorized0 = { "su", "-c", "echo 0 > /sys/bus/usb/drivers/usb/usb1/authorized", };
String[] commandAuthorized1 = { "su", "-c", "echo 1 > /sys/bus/usb/drivers/usb/usb1/authorized", };
Process p;
try {
p = Runtime.getRuntime().exec(commandAuthorized0);
BufferedReader in = new BufferedReader(new InputStreamReader(p.getInputStream()));
Log.d("MainActivity", "From unbind: " + in.toString());
// I don't think "rebinding" works here but if you listen for the usb disconnect you can then call this second runtime command to bind the internal usbhub
Thread.sleep(3000);
p = Runtime.getRuntime().exec(commandAuthorized1);
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
Log.d("MainActivity", "From bind: " + in.toString());
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Я посмотрел на некоторые новые устройства, которые у меня не рутированы и которые также имеют / sys / bus / usb / drivers / usb / usb2, и могут быть устройства с / sys / bus / usb / drivers / usb / usb3. Таким образом, вам может потребоваться выполнить несколько вызовов в зависимости от устройств, на которых вы хотите, чтобы ваше приложение работало.
Если вы хотите сделать это без рут-доступа. Я все еще пытаюсь найти это решение!
Удачи!
person
Kyle Clinton
schedule
01.08.2016