Права доступа
Если вы не хотите вводить JS, я думаю, что ваше решение не за горами. В этом может помочь лишь небольшая часть государственного управления.
Вам нужно будет проверять разрешения AndroidManifyt и Android во время компиляции и при первом запуске пользователь использует ваше приложение, потому что вы хотите, чтобы пользователь специально разрешал / запрещал эту функцию динамически во время работы. Не постоянно возиться с настройками / разрешениями приложений для Android. Переход к настройкам и из них был бы довольно утомительным. Я также предполагаю, что этот UX - это то, чего вы пытаетесь избежать.
Таким образом, вы должны выполнять во время выполнения проверку разрешений в WebChromeClients onPermissionRequest (что в основном и есть) для каждого случая, когда это срабатывает. Вы можете использовать переменную состояния или белый список доменов, хранящихся в состоянии, чтобы пользователь мог ограничить эту функциональность и даже заблокировать ее для определенных доменов. Вы также можете специально проверить RESOURCE_VIDEO_CAPTURE и т. Д.
Например, вы можете увидеть, как я делаю блокировку домена в моем примере GitHub здесь: https://github.com/marcusbelcher/android-getUserMedia-test см. Строки 106 и 116. Здесь вы можете использовать логику переменной / состояния для блокировки определенных запросов. Это запрос на сеанс, когда кто-то запускает getUserMedia.
Это единственное место во время выполнения, которое вы можете запретить / разрешить. Более подробная информация здесь:
https://github.com/googlesamples/android-PermissionRequest
https://developer.android.com/reference/android/webkit/PermissionRequest
JS переопределяет
Если вы можете / хотите внедрить JS, вы можете внедрить и переопределить getUserMedia внутри DOM через navigator.mediaDevices.getUserMedia = undefined
. Вы можете временно переместить ссылку window.t = navigator.mediaDevices.getUserMedia; navigator.mediaDevices.getUserMedia = null;
и изменить ее, когда захотите.
Более подробная информация здесь:
Веб-браузер Android, загрузка файла JavaScript в папку активов
https://medium.com/appunite-edu-collection/webview-with-injected-js-script-13eb1e0257c9