UWP以用户友好的方式检查用户是否仅授予了摄像机权限

时间:2018-05-18 14:31:49

标签: c# uwp permissions

我已经看到了this个问题,并尝试过基于它的实现:

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....");
    }
}

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

1 个答案:

答案 0 :(得分:3)

  

我所做的一切都不需要捕获音频,我使用(ZXing)的成像库只需要网络摄像头;

在UWP应用中,如果您需要使用Camera,通常会有两种方式。一个是使用MediaCapture。如您所述,MediaCapture.InitializeAsync()需要webcammicrophone权限。

另一种方法是使用windows built-in camera UI。如果您使用webcam,则不应在应用清单文件中指定microphoneCameraCaptureUI功能。这是因为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");
}