Android: Как программно подключить / отключить OTG

Я хочу программно подключать и отключать USB OTG (флэш-накопитель, жесткий диск и т. Д.) На моем устройстве Android

Для USB я использую следующий путь для привязки / отмены привязки USB при подключении к ПК

/sys/bus/usb/drivers/usb/bind or unbind

Точно так же хочу сделать и для OTG.


person saksg    schedule 02.02.2015    source источник
comment
OTG обычно поддерживается оборудованием. OTG означает, что устройство может быть либо ведомым, либо ведущим. Например, подключение двух планшетов через USB.   -  person artless noise    schedule 03.02.2015


Ответы (1)


Если у вас есть 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