Постоянное разрешение USB после перезагрузки без переподключения устройства - PullRequest
0 голосов
/ 30 января 2019

В приложении Android мне нужно разрешение для определенного USB-устройства (известного производителя / идентификатора продукта), которое постоянно подключено к устройству Android.

До сих пор я сделал следующие наблюдения:

  • при использовании UsbManager.requestPermission () разрешение отменяется при повторной загрузке / перезагрузке, и флажок всплывающего окна, кажется, вообще не влияет на это поведение
  • при с использованием фильтров намерений , при повторном подключении USB-устройства разрешение повторно предоставляется правильно (даже при повторном подключении после перезагрузки, если установлен флажок всплывающего окна) НО разрешение после перезагрузки не предоставляется повторноесли я не отключу и не подключу устройство USB .

Можно ли убедиться, что всплывающее окно с разрешением отображается только один раз?(особенно в сценарии, когда устройство Android перезагружается, а устройство USB остается подключенным)

Примечание: приложение не установлено в системной папке и поэтому не может использовать разрешение MANAGE_USB.

Ответы [ 2 ]

0 голосов
/ 05 февраля 2019

Если устройство рутировано, решение состоит в следующем:

  • использовать фильтры намерений для запроса разрешения
  • имитировать повторное подключение устройства 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 голосов
/ 05 февраля 2019

Постоянное разрешение USB невозможно, , поскольку опция перезагрузки принудительно останавливает все, как правило, делает USB также отключенным.

Есть одна возможность спроситьдля повторного подключения USB при перезагрузке.

Можно ли убедиться, что всплывающее окно разрешений отображается только один раз? Нет

Потому что если выподключение usb, которое создает тупиковую ситуацию для того, чтобы позаботиться о том, чтобы они отключали его, а не мешали работе системы.

Так что подключить его через USB невозможно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...