카메라 독립적 플래시Camera-independent Flashlight

이 문서에서는 디바이스 램프가 있는 경우 이러한 램프에 액세스하고 사용하는 방법을 보여 줍니다.This article shows how to access and use a device's lamp, if one is present. 램프 기능은 디바이스의 카메라 및 카메라 플래시 기능과는 별도로 관리됩니다.Lamp functionality is managed separately from the device's camera and camera flash functionality. 이 문서는 램프에 대 한 참조를 획득 하 고 설정을 조정 하는 것 외에도, 사용 하지 않을 때 램프 리소스를 적절 하 게 해제 하는 방법과 다른 앱에서 사용 하는 경우 램프의 가용성이 변경 되는 경우를 감지 하는 방법을 보여 줍니다.In addition to acquiring a reference to the lamp and adjusting its settings, this article also shows you how to properly free up the lamp resource when it's not in use, and how to detect when the lamp's availability changes in case it is being used by another app.

장치의 기본 램프 가져오기Get the device's default lamp

장치의 기본 램프 장치를 얻으려면 GetDefaultAsync를 호출 합니다.To get a device's default lamp device, call Lamp.GetDefaultAsync. 램프 Api는 Windows. Devices 네임 스페이스에 있습니다.The lamp APIs are found in the Windows.Devices.Lights namespace. 이러한 Api에 액세스를 시도 하기 전에이 네임 스페이스에 대 한 using 지시문을 추가 해야 합니다.Be sure to add a using directive for this namespace before attempting to access these APIs.

using Windows.Devices.Lights;
Lamp lamp;
lamp = await Lamp.GetDefaultAsync();

if (lamp == null)
{
    ShowErrorMessage("No Lamp device found");
    return;
}

반환 된 개체가 null이면 장치에서 램프 API가 지원 되지 않습니다.If the returned object is null, the Lamp API is unsupported on the device. 장치에 실제로 장치가 있는 경우에도 일부 장치는 램프 API를 지원 하지 않을 수 있습니다.Some devices may not support the Lamp API even if there is a lamp physically present on the device.

램프 선택기 문자열을 사용 하 여 특정 램프 가져오기Get a specific lamp using the lamp selector string

일부 장치에는 두 개 이상의 램프가 있을 수 있습니다.Some devices may have more than one lamp. 장치에서 사용 가능한 램프 목록을 가져오려면 Getdeviceselector를 호출 하 여 장치 선택기 문자열을 가져옵니다.To obtain a list of lamps available on the device, get the device selector string by calling GetDeviceSelector. 그런 다음이 선택기 문자열을 Deviceinformation에 전달할 수 있습니다.This selector string can then be passed into DeviceInformation.FindAllAsync. 이 메서드는 다양 한 종류의 장치를 열거 하는 데 사용 되 고 선택기 문자열을 사용 하 여 램프 장치만 반환 하도록 메서드를 지정할 수 있습니다.This method is used to enumerate many different kinds of devices and the selector string lets the method know to return only lamp devices. FindAllAsync 에서 반환 된 deviceinformationcollection 개체는 장치에서 사용 가능한 램프를 나타내는 deviceinformation 개체의 컬렉션입니다.The DeviceInformationCollection object returned from FindAllAsync is a collection of DeviceInformation objects representing the lamps available on the device. 목록에서 개체 중 하나를 선택 하 고 Id 속성을 FromIdAsync 에 전달 하 여 요청 된 램프에 대 한 참조를 가져옵니다.Select one of the objects in the list and then pass the Id property to Lamp.FromIdAsync to get a reference to the requested lamp. 이 예제에서는 GetFirstOrDefault 네임 스페이스의 GetFirstOrDefault 확장 메서드를 사용 하 여 EnclosureLocation 속성의 값이 backdeviceinformation 개체를 선택 합니다 .이 값은 장치의 인클로저 후면에 있는 램프 (있는 경우)를 선택 합니다.This example uses the GetFirstOrDefault extension method from the System.Linq namespace to select the DeviceInformation object where the EnclosureLocation.Panel property has a value of Back, which selects a lamp that is on the back of the device's enclosure, if one exists.

Deviceinformation Api는 Windows. Devices 네임 스페이스에 있습니다.Note that the DeviceInformation APIs are found in the Windows.Devices.Enumeration namespace.

using Windows.Devices.Enumeration;
using System.Linq;
string selectorString = Lamp.GetDeviceSelector();


DeviceInformationCollection devices = await DeviceInformation.FindAllAsync(selectorString);

DeviceInformation deviceInfo =
    devices.FirstOrDefault(di => di.EnclosureLocation != null && 
        di.EnclosureLocation.Panel == Windows.Devices.Enumeration.Panel.Back);

if (deviceInfo == null)
{
    ShowErrorMessage("No Lamp device found");
}

lamp = await Lamp.FromIdAsync(deviceInfo.Id);

램프 설정 조정Adjust lamp settings

램프 클래스의 인스턴스를 만든 후에는 IsEnabled 속성을 true로 설정 하 여 램프를 켜 세요.After you have an instance of the Lamp class, turn the lamp on by setting the IsEnabled property to true.

lamp.IsEnabled = true;

IsEnabled 속성을 false로 설정 하 여 램프를 끕니다.Turn the lamp off by setting the IsEnabled property to false.

lamp.IsEnabled = false;

일부 장치에는 색 값을 지 원하는 전구가 있습니다.Some devices have lamps that support color values. Iscolorsettable 수 있는 속성을 확인 하 여 램프에서 색을 지원 하는지 확인 합니다.Check if a lamp supports color by checking the IsColorSettable property. 이 값이 true이면 속성을 사용 하 여 램프 색을 설정할 수 있습니다.If this value is true, you can set the color of the lamp with the Color property.

if (lamp.IsColorSettable)
{
    lamp.Color = Windows.UI.Colors.Blue;
}

램프 가용성이 변경 될 경우 알리도록 등록Register to be notified if the lamp availability changes

액세스를 요청 하기 위해 최신 앱에 램프 액세스가 부여 됩니다.Lamp access is granted to the most recent app to request access. 따라서 다른 앱이 시작 되 고 앱에서 현재 사용 중인 램프 리소스를 요청 하는 경우 앱은 다른 앱이 리소스를 해제할 때까지 더 이상 램프를 제어할 수 없습니다.So, if another app is launched and requests a lamp resource that your app is currently using, your app will no longer be able to control the lamp until the other app has released the resource. 램프 가용성이 변경 될 때 알림을 받으려면 AvailabilityChanged 이벤트에 대 한 처리기를 등록 합니다.To receive a notification when the availability of the lamp changes, register a handler for the Lamp.AvailabilityChanged event.

lamp = await Lamp.GetDefaultAsync();

if (lamp == null)
{
    ShowErrorMessage("No Lamp device found");
    return;
}

lamp.AvailabilityChanged += Lamp_AvailabilityChanged;

이벤트에 대 한 처리기에서 LampAvailabilityChanged 속성을 확인 하 여 램프를 사용할 수 있는지 확인 합니다.In the handler for the event, check the LampAvailabilityChanged.IsAvailable property to determine if the lamp is available. 이 예제에서는 램프를 켜고 끌 수 있는 토글 스위치를 램프 가용성에 따라 사용 하거나 사용 하지 않도록 설정 합니다.In this example, a toggle switch for turning the lamp on and off is enabled or disabled based on the lamp availability.

private void Lamp_AvailabilityChanged(Lamp sender, LampAvailabilityChangedEventArgs args)
{
    lampToggleSwitch.IsEnabled = args.IsAvailable;
}

사용 중이 아닌 경우 램프 리소스를 적절 하 게 삭제 합니다.Properly dispose of the lamp resource when not in use

더 이상 램프를 사용 하지 않는 경우 사용 하지 않도록 설정 하 고 램프를 호출 해야 합니다. 리소스를 해제 하 고 다른 앱이 램프에 액세스 하도록 허용 합니다.When you are no longer using the lamp, you should disable it and call Lamp.Close to release the resource and allow other apps to access the lamp. C #을 사용 하는 경우이 속성은 Dispose 메서드에 매핑됩니다.This property is mapped to the Dispose method if you are using C#. AvailabilityChanged에 등록 한 경우 램프 리소스를 삭제할 때 처리기를 등록 취소 해야 합니다.If you registered for the AvailabilityChanged, you should unregister the handler when you dispose of the lamp resource. 코드에서 램프 리소스를 삭제 하는 올바른 장소는 앱에 따라 달라 집니다.The right place in your code to dispose of the lamp resource depends on your app. 램프에서 단일 페이지에 대 한 액세스 범위를 만들려면 OnNavigatingFrom 이벤트에서 리소스를 해제 합니다.To scope lamp access to a single page, release the resource in the OnNavigatingFrom event.

protected override void OnNavigatingFrom(NavigatingCancelEventArgs e)
{
    lamp.AvailabilityChanged -= Lamp_AvailabilityChanged;
    lamp.IsEnabled = false;
    lamp.Dispose();
    lamp = null;
}