Blazor MAUI - 相机和麦克风 Android 权限
Posted
技术标签:
【中文标题】Blazor MAUI - 相机和麦克风 Android 权限【英文标题】:Blazor MAUI - Camera and Microphone Android permissions 【发布时间】:2022-01-10 17:48:48 【问题描述】:我正在尝试在<video>
html 元素中显示来自摄像头和麦克风的实时流。
在 blazor 文件 (sample.razor
) 中,我调用方法来请求和显示视频:
protected override async Task OnAfterRenderAsync(bool firstRender)
await base.OnAfterRenderAsync(firstRender);
if (firstRender)
await JSRuntime.InvokeVoidAsync("requestMediaAndShow");
在 javascript 文件 (sample.js
) 中,我请求流并分配给视频 html 元素。
// Create request options
let options =
audio: true,
video: true
;
// Request user media
navigator.mediaDevices
.getUserMedia(options)
.then(gotLocalStream)
.catch(logError);
但是当我提出请求时,我发现了类似“NotAllowedError: Permission denied”之类的错误。
androidManifest.xml
包含:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
MainActivity.cs
包含:
public class MainActivity : MauiAppCompatActivity
protected override void OnCreate(Bundle savedInstanceState)
base.OnCreate(savedInstanceState);
ActivityCompat.RequestPermissions(this, new[] Manifest.Permission.Camera, Manifest.Permission.RecordAudio, Manifest.Permission.ModifyAudiosettings , 0);
任何想法如何通过 javascript 在 BlazorWebView 中原生地在 android 上请求音频和视频流? PS。无论是在网站上还是在本地 Windows 平台上都运行良好,并且不需要额外的权限。
【问题讨论】:
有趣的问题!在我可以查看的 GitHub 存储库中的某个地方,你有这个小样本吗? 当然。回购地址:github.com/patrykplay/BlazorMauiAndroidDevices 这可能是 BlazorWebView 中的一个错误:github.com/dotnet/maui/issues/3694(来源:我是 BlazorWebView 的开发人员)。 【参考方案1】:虽然Android权限似乎被授予OK,但我怀疑网站权限没有。不知道这个问题的作者是不是同一个人,但an issue was opened on the .NET MAUI repo也是这样。
虽然我们正在考虑使这项工作开箱即用,但另一位乐于助人的用户目前已发布此解决方法。
像这样实现你自己的处理程序
public class MauiWebChromeClient : WebChromeClient
public override void OnPermissionRequest(PermissionRequest request)
request.Grant(request.GetResources());
public class MauiBlazorWebViewHandler : BlazorWebViewHandler
protected override WebChromeClient GetWebChromeClient()
return new MauiWebChromeClient();
并在您的MauiProgram.cs
中注册此处理程序:
builder.ConfigureMauiHandlers(handlers =>
handlers.AddHandler<IBlazorWebView, MauiBlazorWebViewHandler>();
);
这将自动授予来自 Web 端的所有请求的权限。
【讨论】:
不幸的是,这种解决方法似乎无法正常工作,我已经用我的发现更新了 github 问题。 啊,也许我太快了。我完全查看了您的“没有完全修复它但很好的起点”评论:D 原来我也太快了 :D,我只看了 github 问题并错过了在这个问题中所做的更详细的更改。当我在MainActivity.cs
添加更改时,一切似乎都很好!【参考方案2】:
我认为您遗漏了权限检查的某些部分。您应该阅读本节,了解 Android 6.0 中引入的运行时权限。例如,我在 MainActivity 中看不到任何对 OnRequestPermissionsResult 的覆盖。
https://docs.microsoft.com/en-us/xamarin/android/app-fundamentals/permissions?tabs=macos#runtime-permission-checks-in-android-60
【讨论】:
以上是关于Blazor MAUI - 相机和麦克风 Android 权限的主要内容,如果未能解决你的问题,请参考以下文章