Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Naučte se používat senzor okolního světla k detekci změn osvětlení.
Tento příklad vytvoří jednoduchou aplikaci, která jako vstupní zařízení spoléhá na světelný senzor. Senzor okolního světla je jedním z několika typů senzorů prostředí, které aplikacím umožňují reagovat na změny v uživatelském prostředí.
- Důležitá rozhraní API:Windows.Devices.Sensors, LightSensor
Note
Tento článek se zaměřuje na kód, který ukazuje, jak používat světelný senzor. Přehled senzoru světla najdete v tématu Senzory: Světelný senzor.
Předpoklady
Měli byste být obeznámeni se světelným senzorem a jeho použitím. Viz Senzory: Světelný senzor.
Zařízení nebo emulátor, které používáte, musí podporovat senzor okolního světla.
Ukázka kódu
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>
Když se aplikace spustí, můžete změnit hodnoty světla tím, že zakryjete a odkryjete světelný senzor.
Předchozí příklad ukazuje základní kód, který potřebujete napsat, aby bylo možné integrovat vstup světelných senzorů do vaší aplikace.
Připojení k senzoru
Zavolejte metodu GetDefault , která vytvoří spojení s výchozím světelným senzorem.
private LightSensor? lightSensor;
// ...
lightSensor = LightSensor.GetDefault();
Můžete také volat FromIdAsync a vytvořit objekt LightSensor z hodnoty DeviceInformation.Id. Další informace najdete v tématu Vytvoření výčtu zařízení.
Pokud se nezjistí žádný senzor světelných snímačů, stavová zpráva se aktualizuje, aby informovala uživatele.
Nastavení intervalu sestavy
Interval reportu je nastaven v konstruktoru stránky. Tento kód načte minimální interval podporovaný zařízením a porovná ho s požadovaným intervalem 16 milisekund (což se blíží obnovovací frekvenci 60–Hz). Pokud je minimální podporovaný interval větší než požadovaný interval, kód nastaví hodnotu na minimum. V opačném případě nastaví hodnotu na požadovaný interval.
uint minReportInterval = lightSensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
lightSensor.ReportInterval = reportInterval;
Čtení dat ze snímačů
Nová data světelných snímačů se zaznamenávají v obslužné rutině události ReadingChanged . Pokaždé, když ovladač senzoru obdrží nová data ze senzoru, předá hodnoty do vaší aplikace pomocí této události. V tomto příkladu se tyto nové hodnoty zapisují do textových bloků nalezených v XAML pro odpovídající stránku.
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);
});
}
Příbuzná témata
Windows developer