UWP 用户友好的方式来检查用户是否只授予了相机权限

Dan*_*ely 4 c# permissions uwp

我看过这个问题,并尝试过基于它的实现:

private async Task<bool> CameraPermissionCheck()
{
    MediaCapture _mediaCapture = new MediaCapture();
    try
    {
        await _mediaCapture.InitializeAsync();
        return true;
    }
    catch (UnauthorizedAccessException ex)
    {
        return false;
    }
}

private async void DoCameraStuff()
{
    bool cameraAllowed = await CameraPermissionCheck();

    if (cameraAllowed)
    {
        //DO Stuff....
    }
    else
    {
        ShowMessage("Can't Do Stuff because camera permission is denied. To grant them....");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是MediaCapture.InitializeAsync()需要WebcamMicrophone权限。我正在做的任何事情都不需要捕获音频,而我正在使用的成像库 (ZXing) 只需要Webcam; 所以这个解决方案不太理想,因为它需要清单来请求用户单击“是”以获得我的应用程序不需要且永远不会使用的权限。

Sun*_* Wu 6

我正在做的任何事情都不需要捕获音频,我正在使用的图像库(ZXing)只需要网络摄像头;

在 UWP 应用中,如果您需要使用Camera,通常有两种方法。一种是使用MediaCapture. 正如你提到的,MediaCapture.InitializeAsync()需要webcammicrophone权限。

另一种方法是使用windows 内置相机 UI。如果您正在使用,则不应在应用清单文件中指定webcammicrophone功能CameraCaptureUI。这是因为 Windows 内置相机应用是受信任的第一方应用,需要用户通过按钮启动照片、音频和视频捕获按。

Zxing.Net.Mobile您正在使用的库正在使用第一种方式,MediaCapture. 如果您只想指定与WebCam您链接的示例相同的功能,则需要将 设置MediaCaptureInitializationSettings为仅视频。例如:

_mediaCapture = new MediaCapture();
try
{ 
    await _mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings
    {
        StreamingCaptureMode = StreamingCaptureMode.Video 
    });
    _isInitialized = true;
}
catch (UnauthorizedAccessException ex)
{
    Debug.WriteLine("The app was denied access to the camera");
}
Run Code Online (Sandbox Code Playgroud)