Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aprenda a usar o sensor de luz ambiente para detetar alterações na iluminação.
Este exemplo cria uma aplicação simples que depende do sensor de luz como dispositivo de entrada. Um sensor de luz ambiente é um dos vários tipos de sensores ambientais que permitem às aplicações responder a alterações no ambiente do utilizador.
- APIs importantes: Windows. Devices.Sensors, LightSensor
Note
Este artigo foca-se em código que demonstra como usar um sensor de luz. Para uma visão geral do sensor de luz, veja Sensores: Sensor de luz.
Pré-requisitos
Deves estar familiarizado com o sensor de luz e as suas utilizações. Ver Sensores: Sensor de luz.
O dispositivo ou emulador que está a usar deve suportar um sensor de luz ambiente.
Código de exemplo
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>
Quando a aplicação estiver em execução, pode alterar os valores de luminosidade tapando e destapando o sensor de luz.
O exemplo anterior demonstra o código essencial que precisa de escrever para integrar a entrada do sensor de luz na sua aplicação.
Liga-te ao sensor
Chame o método GetDefault para estabelecer uma ligação com o sensor de luz padrão.
private LightSensor? lightSensor;
// ...
lightSensor = LightSensor.GetDefault();
Também pode chamar FromIdAsync para criar um objeto LightSensor a partir de um valor DeviceInformation.Id. Para mais informações, consulte Enumerar dispositivos.
Se não for detetado sensor de luz, a mensagem de estado é atualizada para informar o utilizador.
Definir o intervalo de relatório
O intervalo de relatório é definido dentro do construtor da página. Este código recupera o intervalo mínimo suportado pelo dispositivo e compara-o com um intervalo solicitado de 16 milissegundos (que aproxima uma taxa de atualização de 60 Hz). Se o intervalo mínimo suportado for maior do que o intervalo solicitado, o código define o valor para o mínimo. Caso contrário, define o valor para o intervalo solicitado.
uint minReportInterval = lightSensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
lightSensor.ReportInterval = reportInterval;
Ler dados dos sensores
Os novos dados do sensor de luz são capturados no gestor de eventos ReadingChanged . Cada vez que o driver do sensor recebe novos dados do sensor, ele transmite os valores para a sua aplicação através deste evento. Neste exemplo, estes novos valores são escritos nos blocos de texto encontrados no XAML da página correspondente.
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);
});
}
Tópicos relacionados
Windows developer