How to implement onPermissionRequest() ? #78
Description
Hi, thanks for your NS plugin, it's awesome! 👏
I'm trying to implement:
WebChromeClient#onPermissionRequest(android.webkit.PermissionRequest)
(link to android docs)
to simply grant access to microphone and camera into WebView, but with no success 😢
Here's my code snippet (WebViewExt
's loadStarted
event handler):
let webview = null
// loadStarted event handler
webviewLoadStarted(args) {
if (!webview) webview = args.object
// Variant #1
// extend original WebChromeClient by settings custom `onPermissionRequest()`
let CustomWebChromeClient = new global.android.webkit.WebChromeClient.extend({
onPermissionRequest: function (request) {
// console.log('onPermissionRequest()')
request.grant(request.getResources())
}
})
webview.nativeViewProtected.setWebChromeClient(new CustomWebChromeClient())
// Variant #2
// directly modify `chromeClient's `onPermissionRequest()` function to handle `grant()`
webview.nativeViewProtected.chromeClient.onPermissionRequest = function (request) {
// console.log('onPermissionRequest()')
request.grant(request.getResources())
}
}
As you can see, I tried with two different variants, but no one works.
Important notice - I've already added required permissions to my AndroidManifest.xml
and check & request these permissions during app runtime (before WebView loaded):
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MICROPHONE" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-feature android:name="android.hardware.camera2.full" />
<uses-feature android:name="android.hardware.camera2.autofocus" />
<uses-feature android:name="android.hardware.audio.low_latency" />
<uses-feature android:name="android.hardware.audio.pro" />
<uses-feature android:name="android.hardware.microphone"/>
JS script loaded on page in WebView, still cannot enumerate devices by calling navigator.mediaDevices.getUserMedia()
, but prototyped native Android app can get access to these devices.
Where am I wrong?
Hope for your quick reply and thanks in advance 😃