카메라 독립적 플래시

이 문서에서는 장치의 램프(있는 경우)에 액세스하고 사용하는 방법을 보여 줍니다. 램프 기능은 디바이스의 카메라 및 카메라 플래시 기능과 별도로 관리됩니다. 램프에 대한 참조를 획득하고 설정을 조정하는 것 외에도 이 문서에서는 램프 리소스를 사용하지 않을 때 램프 리소스를 적절하게 해제하는 방법 및 다른 앱에서 사용하는 경우 램프의 가용성이 변경되는 시기를 감지하는 방법도 보여줍니다.

디바이스의 기본 램프 가져오기

디바이스의 기본 램프 디바이스를 얻으려면 Lamp.GetDefaultAsync를 호출합니다. 램프 API는 Windows.Devices.Lights 네임스페이스에 있습니다. 이러한 API에 액세스하기 전에 이 네임스페이스에 대한 using 지시문을 추가해야 합니다.

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

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

반환된 개체가 null이면 디바이스에서 Lamp API가 지원되지 않습니다. 일부 디바이스는 디바이스에 물리적으로 램프가 있는 경우에도 Lamp API를 지원하지 않을 수 있습니다.

램프 선택기 문자열을 사용하여 특정 램프 가져오기

일부 디바이스에 램프가 두 개 이상 있을 수 있습니다. 디바이스에서 사용할 수 있는 램프 목록을 가져오려면 GetDeviceSelector를 호출하여 디바이스 선택기 문자열을 가져옵니다. 그런 다음 이 선택기 문자열을 DeviceInformation.FindAllAsync에 전달할 수 있습니다. 이 메서드는 다양한 종류의 디바이스를 열거하는 데 사용되며 선택기 문자열을 사용하면 램프 디바이스만 반환하도록 메서드에 알 수 있습니다. FindAllAsync에서 반환된 DeviceInformationCollection 개체는 디바이스에서 사용할 수 있는 램프를 나타내는 DeviceInformation 개체의 컬렉션입니다. 목록에서 개체 중 하나를 선택한 다음, Id 속성을 Lamp.FromIdAsync에 전달하여 요청된 램프에 대한 참조를 가져옵니다. 이 예제에서는 System.Linq 네임스페이스의 GetFirstOrDefault 확장 메서드를 사용하여 EnclosureLocation.Panel 속성에 Back 값이 있는 DeviceInformation 개체를 선택합니다. 이 개체가 있는 경우 디바이스 인클로저의 뒷면에 있는 램프를 선택합니다.

DeviceInformation API는 Windows.Devices.Enumeration 네임스페이스에 있습니다.

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);

램프 설정 조정

Lamp 클래스의 인스턴스가 있으면 IsEnabled 속성을 true로 설정하여 램프를 켭니다.

lamp.IsEnabled = true;

IsEnabled 속성을 false로 설정하여 램프를 끕니다.

lamp.IsEnabled = false;

일부 장치에는 색 값을 지원하는 램프가 있습니다. IsColorSettable 속성을 검사 램프가 색을 지원하는지 확인합니다. 이 값이 true이면 Color 속성을 사용하여 램프의 색을 설정할 수 있습니다.

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

램프 가용성이 변경되면 알림을 받도록 등록

램프 액세스는 액세스를 요청하기 위해 최신 앱에 부여됩니다. 따라서 다른 앱이 시작되고 앱에서 현재 사용 중인 램프 리소스를 요청하는 경우 다른 앱이 리소스를 해제할 때까지 앱이 더 이상 램프를 제어할 수 없습니다. 램프의 가용성이 변경될 때 알림을 받으려면 Lamp.AvailabilityChanged 이벤트에 대한 처리기를 등록합니다.

lamp = await Lamp.GetDefaultAsync();

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

lamp.AvailabilityChanged += Lamp_AvailabilityChanged;

이벤트 처리기에서 LampAvailabilityChanged.IsAvailable 속성을 검사 램프를 사용할 수 있는지 확인합니다. 이 예제에서는 램프 가용성에 따라 램프를 켜고 끄기 위한 토글 스위치를 사용하거나 사용하지 않도록 설정합니다.

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

사용하지 않을 때 램프 리소스를 올바르게 삭제합니다.

램프를 더 이상 사용하지 않는 경우 램프를 사용하지 않도록 설정하고 Lamp.Close를 호출하여 리소스를 해제하고 다른 앱이 램프에 액세스할 수 있도록 해야 합니다. 이 속성은 C#을 사용하는 경우 Dispose 메서드에 매핑됩니다. AvailabilityChanged에 등록한 경우 램프 리소스를 삭제할 때 처리기를 등록 취소해야 합니다. 램프 리소스를 삭제하는 코드의 올바른 위치는 앱에 따라 달라집니다. 램프 액세스 범위를 단일 페이지로 지정하려면 OnNavigatingFrom 이벤트에서 리소스를 해제합니다.

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