UWP Удобный способ проверить, предоставил ли пользователь только разрешения для камеры - PullRequest
0 голосов
/ 18 мая 2018

Я видел этот вопрос и пробовал реализацию, основанную на нем:

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() требуются разрешения как Webcam, так и Microphone.Мне ничего не нужно для захвата звука, а используемой библиотеке изображений (ZXing) требуется только Webcam;таким образом, это решение не является идеальным, так как требует, чтобы манифест запросил пользователя нажать «Да», чтобы получить разрешение, которое не требуется моему приложению и никогда не будет использовать.

1 Ответ

0 голосов
/ 22 мая 2018

Ничего, что я делаю, не нужно для захвата звука, а используемой библиотеке изображений (ZXing) нужна только веб-камера;

В приложении UWP, если вам нужно использовать Камера , обычно есть два способа.Один использует MediaCapture.Как вы упоминали, для MediaCapture.InitializeAsync() требуются разрешения webcam и microphone.

Другой способ - использование интерфейса встроенной камеры Windows .Вы не должны указывать возможности webcam или microphone в файле манифеста приложения, если вы используете 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");
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...