Предоставления разрешений работы с USB на Android
При поиске в интернете различных решений предоставления разрешений USB в основном 2 варианта:
Проверка, дано ли разрешения для данного устройства. Если нет, тогда диалоговое окно с подтверждением
val mPermissionIntent = PendingIntent.getBroadcast(context, 0, Intent(ACTION_USB_PERMISSION), 0) usbManager.requestPermission(usbDriver.device, mPermissionIntent)
В таком случае, при каждом подключении устройства будет всплывать запрос на подтверждение
Указать в манифесте в 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-прав, но мне такие варианты не подходят