주변 광원 센서를 사용하여 조명의 변화를 감지하는 방법을 알아봅니다.
이 예제에서는 광원 센서를 입력 디바이스로 사용하는 간단한 앱을 만듭니다. 주변 광원 센서는 앱이 사용자 환경의 변화에 응답할 수 있도록 하는 여러 유형의 환경 센서 중 하나입니다.
- 중요 API:Windows.Devices.Sensors, LightSensor
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();
광원 센서가 감지되지 않으면 사용자에게 알리도록 상태 메시지가 업데이트됩니다.
보고서 간격 설정
보고서 간격은 페이지의 생성자 내에서 설정됩니다. 이 코드는 디바이스에서 지원하는 최소 간격을 검색하고 요청된 간격인 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);
});
}
관련 항목
Windows developer