# h5permission **Repository Path**: scenario-samples/h5permission ## Basic Information - **Project Name**: h5permission - **Description**: H5自动弹窗授权是Flutter Web应用的典型场景之一,如点击H5按钮拉起摄像头和麦克风。 本示例基于WebView_flutter插件和permission_handler插件实现Flutter Web开发中自动拉起摄像头和麦克风。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-16 - **Last Updated**: 2025-12-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Flutter Web开发中自动拉起摄像头和麦克风 ## 介绍 H5自动弹窗授权是Flutter Web应用的典型场景之一,如点击H5按钮拉起摄像头和麦克风。 本示例基于WebView_flutter插件和permission_handler插件实现Flutter Web开发中自动拉起摄像头和麦克风。 ## 效果预览 ## 实现思路 1. 在WebView中使用onPermissionRequest接收H5的相机和麦克风权限申请: ```dart _controller = WebViewController( onPermissionRequest: (request) { _handlePermissionRequest(request); }, ) Future _ensureMicAndCameraPermissions() async { final micStatus = await Permission.microphone.request(); final camStatus = await Permission.camera.request(); return micStatus.isGranted && camStatus.isGranted; } void _handlePermissionRequest(WebViewPermissionRequest request) async { final granted = await _ensureMicAndCameraPermissions(); if (!mounted) return; if (granted) { request.grant(); } else { request.deny(); ScaffoldMessenger.of(context).showSnackBar( const SnackBar(content: Text('需要麦克风/相机权限以继续')), ); } } ``` 2. H5调用用navigator.mediaDevices.getUserMedia获取权限: ```JavaScript function getMedia() { let constraints = { video: {width: 500, height: 500}, audio: true }; // 获取video摄像头区域 let video = document.getElementById("video"); // 返回的Promise对象 let promise = navigator.mediaDevices.getUserMedia(constraints); // then()异步,调用MediaStream对象作为参数 promise.then(function (MediaStream) { video.srcObject = MediaStream; video.play(); }).catch(function(error) { console.error("Error accessing media devices.", error); }); } ``` ## 约束与限制 * 本示例支持API Version 20 Release及以上版本。 * 本示例支持HarmonyOS 6.0.0 Release SDK及以上版本。 * 本示例需要使用DevEco Studio 6.0.0 Release及以上版本进行编译运行。 ## 权限说明 - 获取相机使用权限:[ohos.permission.CAMERA](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/permissions-for-all-user#ohospermissioncamera)。 - 获取麦克风使用权限:[ohos.permission.MICROPHONE](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/permissions-for-all-user#ohospermissionmicrophone)。 ## 工程目录 ``` ├──assets │ └──index.html // 测试H5 ├──lib │ └──main.dart // 主页面 └──ohos ├──entry/src/main/ets │ ├──entryability │ │ └──Entryability.ets // 程序入口 │ └──pages │ └──Index.ets // 启动页面 └──entry/src/main/resources // 应用资源目录 ``` ## 模块依赖 ```yaml permission_handler: git: url: "https://gitcode.com/openharmony-sig/flutter_permission_handler" path: permission_handler webview_flutter: git: url: "https://gitcode.com/openharmony-tpc/flutter_packages.git" path: "packages/webview_flutter/webview_flutter" ``` ## 参考文档 [WebRTC](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/web-rtc) [用户授权(user_grant)的开放权限](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/permissions-for-all-user) [permission_handler插件](https://gitcode.com/openharmony-sig/flutter_permission_handler/tree/br_permission_handler_v11.3.1_ohos) [onPermissionRequest](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-basic-components-web-events#onpermissionrequest9)