광원 센서 사용

주변 광원 센서를 사용하여 조명의 변화를 감지하는 방법을 알아봅니다.

이 예제에서는 광원 센서를 입력 디바이스로 사용하는 간단한 앱을 만듭니다. 주변 광원 센서는 앱이 사용자 환경의 변화에 응답할 수 있도록 하는 여러 유형의 환경 센서 중 하나입니다.

Note

이 문서에서는 광원 센서를 사용하는 방법을 보여 주는 코드에 중점을 둡니다. 광원 센서에 대한 개요는 센서: 광원 센서를 참조하세요.

사전 요구 사항

광원 센서와 그 용도에 대해 잘 알고 있어야 합니다. 센서: 광원 센서를 참조하세요.

사용 중인 디바이스 또는 에뮬레이터는 주변 광원 센서를 지원해야 합니다.

예제 코드

using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Controls;
using Windows.Devices.Sensors;

namespace DevicesDemo.Pages
{
    public sealed partial class LightSensorPage : Page
    {
        private LightSensor? lightSensor;

        public LightSensorPage()
        {
            InitializeComponent();

            // Get the default light sensor object.
            lightSensor = LightSensor.GetDefault();

            if (lightSensor != null)
            {
                // Establish the report interval.
                uint minReportInterval = lightSensor.MinimumReportInterval;
                uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                lightSensor.ReportInterval = reportInterval;

                // Assign an event handler for the reading-changed event.
                lightSensor.ReadingChanged += LightSensor_ReadingChanged;
            }
            else
            {
                statusBar.Message = "No light sensor was found.";
                statusBar.Severity = InfoBarSeverity.Error;
                statusBar.IsOpen = true;
            }
        }

        // This event handler writes the current light
        // reading to the text block on the XAML page.
        private void LightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
        {
            DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
            {
                LightSensorReading reading = args.Reading;
                txtLuxValue.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
            });
        }
    }
}
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition />
        <RowDefinition Height="Auto"/>
    </Grid.RowDefinitions>
    <Grid Margin="24">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto"/>
            <ColumnDefinition/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="44"/>
            <RowDefinition Height="44"/>
            <RowDefinition Height="44"/>
        </Grid.RowDefinitions>
        <TextBlock Text="LUX Reading:" Style="{StaticResource LabelTextBlockStyle}"/>
        <TextBlock x:Name="txtLuxValue" Grid.Column="1" Text="---"/>
    </Grid>

    <InfoBar x:Name="statusBar" Grid.Row="1"/>
</Grid>

앱이 실행되면 광원 센서를 덮고 표시하여 조명 값을 변경할 수 있습니다.

이전 예제에서는 광원 센서 입력을 앱에 통합하기 위해 작성해야 하는 필수 코드를 보여 줍니다.

센서에 연결

GetDefault 메서드를 호출하여 기본 광원 센서와의 연결을 설정합니다.

private LightSensor? lightSensor;
// ...
lightSensor = LightSensor.GetDefault();

FromIdAsync를 호출하여 DeviceInformation.Id 값에서 LightSensor 개체를 만들 수도 있습니다. 자세한 내용은 디바이스 열거를 참조하세요.

광원 센서가 감지되지 않으면 사용자에게 알리도록 상태 메시지가 업데이트됩니다.

보고서 간격 설정

보고서 간격은 페이지의 생성자 내에서 설정됩니다. 이 코드는 디바이스에서 지원하는 최소 간격을 검색하고 요청된 간격인 16밀리초(약 60Hz 새로 고침 속도)와 비교합니다. 지원되는 최소 간격이 요청된 간격보다 큰 경우 코드는 값을 최소값으로 설정합니다. 그렇지 않으면 값을 요청된 간격으로 설정합니다.

uint minReportInterval = lightSensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
lightSensor.ReportInterval = reportInterval;

센서 데이터 읽기

새로운 광원 센서 데이터는 ReadingChanged 이벤트 처리기에서 캡처됩니다. 센서 드라이버가 센서에서 새 데이터를 받을 때마다 이 이벤트를 사용하여 값을 앱에 전달합니다. 이 예제에서는 이러한 새 값이 해당 페이지의 XAML에 있는 텍스트 블록에 기록됩니다.

lightSensor.ReadingChanged += LightSensor_ReadingChanged;
// ...

private void LightSensor_ReadingChanged(LightSensor sender, LightSensorReadingChangedEventArgs args)
{
    DispatcherQueue?.TryEnqueue(DispatcherQueuePriority.Normal, () =>
    {
        LightSensorReading reading = args.Reading;
        txtLuxValue.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
    });
}