UWP中如何仅检查用户是否授予相机权限(无需麦克风权限)
在UWP中仅检查相机权限的友好方案
嘿,你的这个困扰我太懂了——之前用MediaCapture.InitializeAsync()来检查权限确实会“多管闲事”,连带要求麦克风权限,但你明明只需要相机权限对吧?别担心,我有个更精准的方案,完全不用碰不必要的权限。
原方案的问题
你之前实现的代码里,MediaCapture.InitializeAsync()默认会尝试同时初始化视频和音频捕获设备,所以哪怕你不需要音频功能,它也会触发麦克风权限的请求。这就导致你不得不在应用清单里申请一项根本用不上的权限,既不符合最小权限原则,也容易让用户困惑。
精准检查相机权限的方案
我们可以直接用UWP的AppCapabilityAccessManager类来单独检查相机权限,完全不需要初始化MediaCapture,也就不会牵扯到麦克风权限。
步骤1:添加必要的命名空间
using Windows.Security.Authorization.AppCapabilityAccess;
步骤2:编写权限检查方法
private async Task<bool> CheckCameraOnlyPermission() { // 指定要检查的相机权限标识 const string cameraCapability = "webcam"; var accessStatus = await AppCapabilityAccessManager.RequestAccessAsync(cameraCapability); // 返回权限是否已授予 return accessStatus == AppCapabilityAccessStatus.Allowed; }
步骤3:在业务逻辑中调用
private async void DoCameraStuff() { bool cameraAllowed = await CheckCameraOnlyPermission(); if (cameraAllowed) { // 这里放心使用ZXing做扫码等仅需相机的操作 // DO Stuff.... } else { ShowMessage("无法完成操作,因为相机权限未授予。你可以前往系统设置的应用权限页面开启相机权限。"); } }
额外注意事项
记得在你的应用清单(Package.appxmanifest)里只声明相机权限,删掉任何麦克风相关的权限声明:
<Capabilities> <DeviceCapability Name="webcam" /> </Capabilities>
这样一来,应用只会向用户请求相机权限,完全符合你的需求,也不会触发不必要的麦克风权限请求。
内容的提问来源于stack exchange,提问作者Dan Is Fiddling By Firelight
相关产品推荐
相关产品推荐

