Skip to content
This repository was archived by the owner on Jan 10, 2024. It is now read-only.
This repository was archived by the owner on Jan 10, 2024. It is now read-only.

How to implement onPermissionRequest() ? #78

Open
@TemaSM

Description

@TemaSM

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 😃

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions