'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 |
