'Flutter InAppWebView Camera/Audio Permissions

Trying to navigate to Doxy.me through the Flutter InAppWebView widget and activate the user's microphone and audio for a video call. Every time I try pulling up the Doxy site, it says that camera and microphone permissions have been blocked for my phone (even though they aren't). In addition, I have been getting the error that "No permissions found in manifest for: 1" when trying to run Permissions.camera.request() even though I have the required permissions in my manifest.

Errors: D/permissions_handler: No permissions found in manifest for: 1

WebContentsDelegate::CheckMediaAccessPermission: Not supported.

Permissions in my AndroidManifest.xml

    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <uses-permission android:name="android.permission.VIDEO_CAPTURE" />
    <uses-permission android:name="android.permission.AUDIO_CAPTURE" />

Flutter code

Widget build(BuildContext context) {
    print("Build Video");
    return Consumer<WebViewModel>(builder: (context, model, child) {
      return PageWrapper(
        backgroundColor: Colors.black,
        child: Stack(
          children: <Widget>[
            InAppWebView(
              androidOnPermissionRequest: (InAppWebViewController controller,
                  String origin, List<String> resources) async {
                print("%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%");
                model.permissionHandling();
                return PermissionRequestResponse(
                    resources: resources,
                    action: PermissionRequestResponseAction.GRANT);
              },
              key: model.webViewKey,
              onLoadStart: (InAppWebViewController controller, String url) {
                setState(() {
                  model.url = url;
                  model.setLoading(true);
                });
              },
              onLoadStop:
                  (InAppWebViewController controller, String url) async {
                setState(() {
                  model.url = url;
                  model.setLoading(false);
                });
              },
              initialUrl: model.url,
              //javascriptMode: JavascriptMode.unrestricted,
              //initialMediaPlaybackPolicy: AutoMediaPlaybackPolicy.always_allow,
            ),
            Center(
              child: Visibility(
                  visible: model.loading, child: cupertinoLoadingIndicator()),
            ),
            Positioned(
              top: 0,
              right: 0,
              child: BackHelper(
                child: BackButtonCustom(
                  Image.asset(
                    "assets/images/close.png",
                    color: postIcon,
                  ),
                  () => BackHelper.navigateBack(context),
                ),
              ),
            ),
          ],
        ),
      );
    });
  }

Model.permissionHandling function

void permissionHandling() async {
    WidgetsFlutterBinding.ensureInitialized();
    PermissionStatus status = await Permission.microphone.request();
    PermissionStatus status2 = await Permission.camera.request();
    if (status != PermissionStatus.granted ||
        status2 != PermissionStatus.granted) {
      print("************************************");
      return;
    }
  }


Solution 1:[1]

Use this for web audio and video permission:

await window.navigator.getUserMedia(audio: true, video: true);

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 josxha