在 flutter webview 上访问相机

2023-12-08

我有网页显示用户摄像头,如何在 flutter webview 上访问摄像头?

我尝试用这个 URL 来做到这一点“https://webrtc.github.io/samples/src/content/getusermedia/gum/" 但返回 getUserMedia 错误:NotAllowedError


你可以试试我的插件flutter_inappwebview.

要请求有关摄像头和麦克风的权限,您可以使用权限处理程序 plugin.

此外,它还具有androidOnPermissionRequestAndroid 的事件,即当 WebView 请求访问指定资源(即 Android 原生资源)的权限时触发的事件WebChromeClient.onPermissionRequest 事件).

在 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 on https://appr.tc/,这是一个基于WebRTC的视频聊天演示应用程序(https://github.com/webrtc/apprtc)。 为了让它工作,你需要设置选项mediaPlaybackRequiresUserGesture to false.

此外,您还需要在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" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 flutter webview 上访问相机 的相关文章

随机推荐

  • 关于泛型方法调用的 Java 类型提示

    我想知道调用具有如下签名的静态方法的正确方法是什么 public static
  • 如何获取单选按钮的文本(而不是值)

    我知道我可以获取单选按钮的 值 属性 但我发现获取单选按钮的文本非常困难 考虑下面的例子 它有 3 个单选按钮 并尝试提醒第一个单选按钮的值 红色 然后尝试提醒单选按钮的文本 苹果 但失败了 获取几乎任何元素的文本都可以使用 elem ch
  • 正则表达式在文件夹中查找文件

    如何查找文件夹中与正则表达式模式匹配的所有文件 Thanks The GetFiles方法允许您指定通配符模式 但不是真正的正则表达式 另一种可能性是简单地循环遍历文件并根据正则表达式验证它们的名称 IEnumerable
  • 将图像大小调整到给定边界区域的最简单方法是什么?

    我想创建一个函数 例如 def generateThumbnail self width height Generates thumbnails for an image im Image open self file im thumbna
  • MYSQLi 错误:用户已经拥有超过“max_user_connections”的活动连接[重复]

    这个问题在这里已经有答案了 我正在运行的网站上出现以下错误 我不明白为什么会这样 因为它在我的本地主机上运行良好 跟楼主有关系吗 我在 Unix 服务器上 Warning mysqli mysqli mysqli mysqli 42000
  • NodeJS 将 Int16Array 二进制缓冲区转换为 Google Speech API 的 LINEAR16 编码原始流

    我正在尝试在节点服务器中将语音转换为文本 其中使用 AudioContext 在浏览器中进行语音录制 我能够通过binaryType arraybuffer的WebSocket连接将int16Array缓冲区 记录的数据 发送到我的节点服务
  • 从列号获取 Excel 样式的列名称

    这是在提供行和列 ID 时提供列名称的 代码 但当我给出如下值时row 1 and col 104 它应该返回CZ 但它返回D row 1 col 104 div col column label str while div div mod
  • 如何从左到右移动uiview,反之亦然

    您好 我正在开发一个应用程序 我为一个视图制作了从左到右 从右到左移动的动画 并更改该视图中包含的标签的值 但是当我单击左或右按钮时 该视图将被删除新视图覆盖旧视图 所以我不想覆盖 只是我想添加新视图 我的代码是 void centerAn
  • 文本文件的行数

    我正在尝试创建一个函数 它接受文件名 即 data txt 并生成该文件的行数 data txt 24 42 45 54 67 76 89 98 12 21 99 99 33 33 下面的代码是我尝试构建一个函数 该函数接受文件名 data
  • mongoose 和 mongoJS 有什么区别?我应该使用哪个?

    我只是想知道 mongoose 和 mongoJS 有什么区别 那么 如果我们使用 mongoose 或 mongoJS 有何优点和缺点 因为我们知道连接 NodeJS 和 MongoDB 有很多依赖关系 例如猫鼬和 mongoJS Mon
  • 如何从 HTML 文件中提取元标签并在 SOLR 和 TIKA 中对其进行索引

    我正在尝试提取 HTML 文件的元标签 并通过 tika 集成将它们索引到 solr 中 我无法使用 Tika 提取这些元标记 也无法在 solr 中显示 我的 HTML 文件看起来像这样
  • 嵌套对象的默认值

    假设我有以下提供默认值的对象 default values a 0 b 0 c aa 0 bb 0 我还有另一个对象可以覆盖其中一些默认值 override values a 5 c aa 5 我想要的是将这两个对象结合起来 从而产生 co
  • 使用 C# 通过 Skype 进行通话

    我想开发一个盲人辅助软件 比如Jarvis 它是一个 C 表单应用程序 我需要将我的 C 项目与 Skype API 连接起来 以便使用 Skype 调用某个用户名 当我使用命令时Call John 它通过 Skype 呼叫 John 进行
  • 在 NodeJS 协议中实现 STARTTLS

    我正在尝试将 STARTTLS 升级添加到现有协议 当前以纯文本形式运行 首先 我使用一个简单的基于行的回显服务器 这是一个可怕的组装 没有错误处理或将数据包处理成行 但它通常只是在控制台一次发送一行到标准输入时工作 我认为我的服务器是正确
  • Haskell - Aeson:尝试解码 JSON URL Req 时得到“Nothing”

    我对 Haskell 比较陌生 现在我正在尝试更深入地了解并尝试习惯不同的流行库 现在我正在尝试 aeson 我想要做的是解析来自的 MSFT 报价请求 这就是它的样子 Global Quote 01 symbol MSFT 02 open
  • 如何通过ajax验证两个密码字段?

    我正在尝试使用 JSF 验证两个密码字段 但到目前为止还不好 我在 google 上搜索它 但一切都是关于 JSF 1 2 并且非常混乱 我正在使用 JSF 2 0 这就是我到目前为止正在做的事情
  • 如何编写 VBScript 在给定文件夹中启动快捷方式?

    Set oWS WScript CreateObject WScript Shell sLinkFile USERPROFILE Desktop TTS lnk Set oLink oWS CreateShortcut sLinkFile
  • JSTL 格式标签

    尝试在输入文本字段内填充日期值并设置其格式 我在这里做错了什么
  • Material UI 是否已经支持 CSS 容器查询?

    https developer mozilla org en US docs Web CSS CSS Container Queries Container queries for CSS都是最近的 是MUI 5 0已经能够使用它们了吗 不
  • 在 flutter webview 上访问相机

    我有网页显示用户摄像头 如何在 flutter webview 上访问摄像头 我尝试用这个 URL 来做到这一点 https webrtc github io samples src content getusermedia gum 但返回