Сохранение разрешения USB после перезагрузки без повторного подключения устройства

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

Пока что я сделал следующие наблюдения:

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

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

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


person sdabet    schedule 30.01.2019    source источник


Ответы (2)


Решение состоит в том, чтобы использовать фильтры намерений и добавить атрибут android:directBootAware="true" к связанному действию, чтобы событие USB_DEVICE_ATTACHED было правильно получено после загрузки.

person sdabet    schedule 05.02.2019
comment
Если бы я только мог дать вам один МИЛЛИОН голосов за :-) Большое спасибо. Как вы пришли к этому фрагменту кода android:directBootAware="true"? Магия. Я часами искал это. - person W.M.; 20.03.2020
comment
Я бросил несколько месяцев назад, пытаясь найти решение для этого. По чистой случайности я перепроверил эту тему и нашел ваше обновленное решение, которое работает! - person The Berga; 26.06.2020

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

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

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

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

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

person Amjad Khan    schedule 05.02.2019
comment
Мы не можем сказать, что перезагрузка отключает USB-порт, поскольку USB-устройство фактически видно с помощью UsbManager после перезагрузки. Он просто не сохраняет (или повторно не предоставляет) разрешение на доступ. - person sdabet; 05.02.2019
comment
Да, он удаляет доступ к USB - person Amjad Khan; 05.02.2019
comment
знаете ли вы, как программно запустить отключение / повторное подключение? - person sdabet; 05.02.2019