对于webview,您需要授予正确的权限。
在您的情况下,如果您正在尝试使用相机和麦克风(例如用于WebRTC实时聊天),则需要在
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" />
但这还不够,因为您需要向用户请求摄像头和麦克风的权限。因此,您可以使用
permission_handler插件。
对于Webview,您可以使用我的插件
flutter_inappwebview,它提供了
androidOnPermissionRequest
事件。您需要在Android上进行实现,这是一个触发事件,当WebView请求访问特定资源时(即Android原生
WebChromeClient.onPermissionRequest event)会被触发。 在这种情况下,此事件用于授予WebRTC API的权限。
以下是在Android上使用WebRTC的示例:
import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_inappwebview/flutter_inappwebview.dart';
import 'package:permission_handler/permission_handler.dart';
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
await Permission.camera.request();
await Permission.microphone.request();
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => new _MyAppState();
}
class _MyAppState extends State<MyApp> {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: InAppWebViewPage()
);
}
}
class InAppWebViewPage extends StatefulWidget {
@override
_InAppWebViewPageState createState() => new _InAppWebViewPageState();
}
class _InAppWebViewPageState extends State<InAppWebViewPage> {
InAppWebViewController _webViewController;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text("InAppWebView")
),
body: Container(
child: Column(children: <Widget>[
Expanded(
child: Container(
child: InAppWebView(
initialUrl: "https://appr.tc/r/158489234",
initialOptions: InAppWebViewGroupOptions(
crossPlatform: InAppWebViewOptions(
mediaPlaybackRequiresUserGesture: false,
debuggingEnabled: true,
),
),
onWebViewCreated: (InAppWebViewController controller) {
_webViewController = controller;
},
androidOnPermissionRequest: (InAppWebViewController controller, String origin, List<String> resources) async {
return PermissionRequestResponse(resources: resources, action: PermissionRequestResponseAction.GRANT);
}
),
),
),
]))
);
}
}
这个例子使用了房间158489234
,该房间是基于WebRTC(https://github.com/webrtc/apprtc)的视频聊天演示应用https://appr.tc/。
为了使其正常工作,您需要将选项mediaPlaybackRequiresUserGesture
设置为false
并实现(对于Android)onPermissionRequest
事件。