Použití světelného senzoru

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í.

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