You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET MAUI Blazor组件应用Mac Catalyst端麦克风与相机权限弹窗不显示的解决方法

解决Mac Catalyst下.NET MAUI Blazor权限请求弹窗不显示问题

1. 配置Info.plist权限描述

Mac Catalyst要求必须在Info.plist中添加麦克风和相机的权限说明,否则系统不会弹出权限请求弹窗。在项目的Platforms/MacCatalyst/Info.plist中添加以下内容:

<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风进行语音通话</string>
<key>NSCameraUsageDescription</key>
<string>需要访问相机进行视频通话</string>

替换字符串为你的应用实际用途描述,这是系统弹窗显示的核心文本。

2. 用.NET MAUI原生API触发权限请求

Blazor WebView中的getUserMedia调用在Mac Catalyst下可能无法直接触发系统权限弹窗,建议先通过.NET MAUI原生权限API主动请求权限,之后JS才能正常访问媒体设备。

在Blazor页面的代码后台(或App启动时)添加以下C#代码:

using Microsoft.Maui.ApplicationModel;
using Microsoft.Maui.ApplicationModel.Permissions;

// 在合适时机调用,比如页面加载完成时
async Task RequestMediaPermissions()
{
    var micStatus = await Permissions.CheckStatusAsync<Permissions.Microphone>();
    var camStatus = await Permissions.CheckStatusAsync<Permissions.Camera>();

    if (micStatus != PermissionStatus.Granted)
    {
        micStatus = await Permissions.RequestAsync<Permissions.Microphone>();
    }

    if (camStatus != PermissionStatus.Granted)
    {
        camStatus = await Permissions.RequestAsync<Permissions.Camera>();
    }

    // 权限申请完成后,再执行JS的媒体设备初始化
    if (micStatus == PermissionStatus.Granted && camStatus == PermissionStatus.Granted)
    {
        await JS.InvokeVoidAsync("initMediaDevices");
    }
}

将你的JS代码封装为函数,等待权限申请完成后调用:

function initMediaDevices() {
  if (navigator.mediaDevices && navigator.mediaDevices.getUserMedia) {
    navigator.mediaDevices.getUserMedia({ audio: true, video: true })
      .then(function(stream) {
        // 处理媒体流逻辑
      })
      .catch(function(error) {
        // 处理错误逻辑
      });
  }
}

3. 检查WebView权限配置

确保MAUI的BlazorWebView允许媒体访问,在MainPage.xaml的BlazorWebView标签中添加平台专属配置:

<BlazorWebView HostPage="wwwroot/index.html">
    <BlazorWebView.RootComponents>
        <RootComponent Selector="#app" ComponentType="{x:Type local:Main}" />
    </BlazorWebView.RootComponents>
    <BlazorWebView.PlatformBlazorWebView>
        <macCatalyst:BlazorWebViewConfiguration AllowsInlineMediaPlayback="true" />
    </BlazorWebView.PlatformBlazorWebView>
</BlazorWebView>

4. 处理权限已被拒绝的情况

如果用户之前已拒绝过权限,系统不会再自动弹窗,此时需要引导用户手动开启:

if (micStatus == PermissionStatus.Denied || camStatus == PermissionStatus.Denied)
{
    await App.Current.MainPage.DisplayAlert("权限不足", "请在系统设置中开启麦克风和相机权限", "前往设置");
    AppInfo.ShowSettingsUI();
}

内容的提问来源于stack exchange,提问作者Smit Rathod

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 14:52:43