Предоставления разрешений работы с USB на Android

При поиске в интернете различных решений предоставления разрешений USB в основном 2 варианта:

  1. Проверка, дано ли разрешения для данного устройства. Если нет, тогда диалоговое окно с подтверждением

    val mPermissionIntent =
    PendingIntent.getBroadcast(context, 0, Intent(ACTION_USB_PERMISSION), 0)
    usbManager.requestPermission(usbDriver.device, mPermissionIntent)
    

В таком случае, при каждом подключении устройства будет всплывать запрос на подтверждение

  1. Указать в манифесте в intent-filter и список устройств для активити

             <intent-filter>
             <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
         </intent-filter>
    
         <meta-data
             android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
             android:resource="@xml/device_filter" />
    

В такой случае при каждом подключении устройства будет перекидывать на тот активити для которого объявлен фильтр

В моем случае оба варианта не подходят, так как устройство часто автоматически отключается/подключается и необходимо, чтобы без участия пользователя давалось разрешение на работу с USB.

Знаю, что в сервисе указать фильтр устройств как во 2ом варианте через манифест нельзя, необходимо каждый раз давать разрешение на работу с устройством. Пробовал через broadcast receiver обработать:

        <receiver
        android:name=".UsbBroadcast"
        android:enabled="true"
        android:exported="true"
        tools:ignore="Instantiatable">
        <intent-filter>
            <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            <action android:name="android.hardware.usb.action.USB_DEVICE_DETACHED" />
        </intent-filter>

        <meta-data
            android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
            android:resource="@xml/device_filter" />
    </receiver>

class UsbBroadcast: BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
    when (intent?.action) {
        UsbManager.ACTION_USB_DEVICE_ATTACHED -> {
            
        }

        UsbManager.ACTION_USB_DEVICE_DETACHED -> {
            
        }
    }
}
}

Но в таком варианте так же необходимо давать разрешение при каждом подключении устройства.

Вопрос в следующем. Возможно есть какой-либо вариант, который я упустил и можно как-то обрабатывать разрешения USB без участия пользователя или только первые 2 варианта и никак иначе ? Видел варианты через разрешения root-прав, но мне такие варианты не подходят


Ответы (0 шт):