De lichtsensor gebruiken

Leer hoe u de omgevingslichtsensor gebruikt om veranderingen in verlichting te detecteren.

In dit voorbeeld wordt een eenvoudige app gemaakt die afhankelijk is van een lichtsensor als invoerapparaat. Een omgevingslichtsensor is een van de verschillende soorten omgevingssensoren waarmee apps kunnen reageren op wijzigingen in de omgeving van de gebruiker.

Note

Dit artikel is gericht op code die laat zien hoe u een lichtsensor gebruikt. Zie Sensoren: Lichtsensor voor een overzicht van de lichtsensor.

Prerequisites

U moet bekend zijn met de lichtsensor en het gebruik ervan. Zie Sensoren: Lichtsensor.

Het apparaat of de emulator die u gebruikt, moet een omgevingslichtsensor ondersteunen.

Voorbeeldcode

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>

Wanneer de app wordt uitgevoerd, kunt u de lichtwaarden wijzigen door de lichtsensor te bedekken en bloot te leggen.

In het vorige voorbeeld ziet u de essentiële code die u moet schrijven om lichtsensorinvoer in uw app te integreren.

Verbinding maken met de sensor

Roep de GetDefault-methode aan om een verbinding tot stand te brengen met de standaardlichtsensor.

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

U kunt ook FromIdAsync aanroepen om een LightSensor-object te maken op basis van een DeviceInformation.Id-waarde. Zie Apparaten inventariseren voor meer informatie.

Als er geen lichtsensor wordt gedetecteerd, wordt het statusbericht bijgewerkt om de gebruiker hierover te informeren.

Het rapportinterval instellen

Het rapportinterval wordt ingesteld in de constructor van de pagina. Met deze code wordt het minimale interval opgehaald dat door het apparaat wordt ondersteund en vergeleken met een aangevraagd interval van 16 milliseconden (wat een vernieuwingsfrequentie van 60 Hz bij benadering is). Als het minimaal ondersteunde interval groter is dan het aangevraagde interval, stelt de code de waarde in op het minimum. Anders wordt de waarde ingesteld op het aangevraagde interval.

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

Sensorgegevens lezen

De nieuwe lichtsensorgegevens worden geregistreerd in de ReadingChanged-eventhandler. Telkens wanneer het sensorstuurprogramma nieuwe gegevens van de sensor ontvangt, worden de waarden aan uw app doorgegeven met behulp van deze gebeurtenis. In dit voorbeeld worden deze nieuwe waarden naar de tekstblokken geschreven die in de XAML voor de bijbehorende pagina zijn gevonden.

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