Search code examples
c#windowswindows-10windows-10-mobile

How to detect is a camera is available using isTypePresent in a Windows 10 Universal Application


When developing a Universal Application for Windows 10 you are encouraged to detect device specific hardware using IsTypePresent. (Microsoft refer to this feature as 'Light up'). An example from the documentation that checks for a device's back button is:

if(Windows.Foundation.Metadata.ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareButtons_BackPressed;

It is clear here that the string "Windows.Phone.UI.Input.HardwareButtons" is passed as an argument to the IsTypePresent() method.

I would like to know if there is an easy way to identify other strings that I could use for other pieces of hardware and, in particular, the camera.


Solution

  • IsTypePresent isn't used to detect hardware presence but to detect API presence. In your code snippet it's checking if the HardwareButtons class exists for the app to call, not if the device has hardware buttons (in this case they're likely to go together, but that's not what IsTypePresent is looking for).

    The MediaCapture class used with the camera is part of the Universal API Contract and so is always there and callable. Initialization will fail if there is no appropriate audio or video device.

    To find hardware devices you can use the Windows.Devices.Enumeration namespace. Here's a quick snippet that queries for cameras and finds the ID of the first one.

    var devices = await Windows.Devices.Enumeration.DeviceInformation.FindAllAsync(Windows.Devices.Enumeration.DeviceClass.VideoCapture);
    
    if (devices.Count < 1)
    {
        // There is no camera. Real code should do something smart here.
        return;
    }
    
    // Default to the first device we found
    // We could look at properties like EnclosureLocation or Name
    // if we wanted a specific camera
    string deviceID = devices[0].Id;
    
    // Go do something with that device, like start capturing!