6

I am trying to make a project that allows me to pull up a camera, but I am told that I was denied access to the camera every time the program ran. I read through the tutorial from the following link https://msdn.microsoft.com/en-us/library/windows/apps/mt243896.aspx and made some minor changes to the code, but the changes shouldn't affect the outcome

    private MediaCapture _mediaCapture;
    private bool _isInitialized;

  private async Task InitializeCameraAsync()
    {
        if (_mediaCapture == null)
        {
            // Get available devices for capturing pictures
            var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture);

            // Get the desired camera by panel
            DeviceInformation cameraDevice =
                allVideoDevices.FirstOrDefault(x => x.EnclosureLocation != null &&
                x.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);

            // If there is no camera on the specified panel, get any camera
            cameraDevice = cameraDevice ?? allVideoDevices.FirstOrDefault();

            if (cameraDevice == null)
            {
                Debug.WriteLine("No camera device found.");
                return;
            }

            // Create MediaCapture and its settings
            _mediaCapture = new MediaCapture();

            MediaCaptureInitializationSettings mediaInitSettings = new MediaCaptureInitializationSettings {
                VideoDeviceId = cameraDevice.Id
              };

            // Initialize MediaCapture
            try
            {
                await _mediaCapture.InitializeAsync(mediaInitSettings);
                _isInitialized = true;
            }
            catch (UnauthorizedAccessException)
            {
                Debug.WriteLine("The app was denied access to the camera");
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception when initializing MediaCapture with {0}: {1}", cameraDevice.Id, ex.ToString());
            }

            // If initialization succeeded, start the preview
            if (_isInitialized)
            {
                // Figure out where the camera is located
                if (cameraDevice.EnclosureLocation == null || cameraDevice.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Unknown)
                {
                    // No information on the location of the camera, assume it's an external camera, not integrated on the device
                    _externalCamera = true;
                }
                else
                {
                    // Camera is fixed on the device
                    _externalCamera = false;

                    // Only mirror the preview if the camera is on the front panel
                    _mirroringPreview = (cameraDevice.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Front);
                }

                await StartPreviewAsync();

            }
        }
    }

Also, I made sure that my camera allows access to be used for apps. Does anyone have an idea of why it's not working?

Lotzi11
  • 477
  • 1
  • 13
  • 26

2 Answers2

21

Add Microphone and camera properties from Manifest file. The Manifest file shall be present in the project only. Search for Capabilities tab and check the relevant options

Apoorv
  • 2,023
  • 1
  • 19
  • 42
  • Funny thing, there exist a "Webcam" alternative which I thought would suffice. Apparently not. Thanks for the great answer! – Ms01 Dec 28 '17 at 18:29
  • Hey ! Pleasure to help you – Apoorv Dec 30 '17 at 07:07
  • @Ms01 Did you miss marking it as an answer ? Would help others if its marked as an answer to your question :) – Apoorv Feb 19 '18 at 18:48
  • Sorry, it is not me who asked the question, just had the same issue and got helped by your answer. – Ms01 Feb 26 '18 at 11:11
  • 2
    If your app started off originally without webcam permissions, and then you went to add them later, sometimes the consent prompt isn't ever shown. The only way to reset the permissions to allow webcam is to go in through "App Settings" - https://www.howtogeek.com/368598/how-to-manage-app-permissions-on-windows-10/ – zax Jan 30 '19 at 16:56
0

Use StreamingCaptureMode = StreamingCaptureMode.Video to only request access to the camera, like this:

await _mediaCapture.InitializeAsync(new MediaCaptureInitializationSettings
{
    StreamingCaptureMode = StreamingCaptureMode.Video 
});
jameshfisher
  • 34,029
  • 31
  • 121
  • 167