Verwenden des Lichtsensors

Erfahren Sie, wie Sie den Umgebungslichtsensor verwenden, um Änderungen der Beleuchtung zu erkennen.

In diesem Beispiel wird eine einfache App erstellt, die auf einem Lichtsensor als Eingabegerät basiert. Ein Umgebungslichtsensor ist eine der verschiedenen Arten von Umgebungssensoren, mit denen Apps auf Änderungen in der Umgebung des Benutzers reagieren können.

Note

Dieser Artikel konzentriert sich auf Code, der die Verwendung eines Lichtsensors veranschaulicht. Eine Übersicht über den Lichtsensor finden Sie unter Sensoren: Lichtsensor.

Voraussetzungen

Sie sollten mit dem Lichtsensor und dessen Verwendung vertraut sein. Siehe Sensoren: Lichtsensor.

Das verwendete Gerät oder der Emulator muss einen Umgebungslichtsensor unterstützen.

Beispielcode

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>

Wenn die App ausgeführt wird, können Sie die Lichtwerte ändern, indem Sie den Lichtsensor abdecken und aufdecken.

Im vorherigen Beispiel wird der wesentliche Code veranschaulicht, den Sie schreiben müssen, um die Lichtsensoreingabe in Ihre App zu integrieren.

Verbindung mit dem Sensor herstellen

Rufen Sie die GetDefault-Methode auf, um eine Verbindung mit dem Standardlichtsensor herzustellen.

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

Sie können auch FromIdAsync aufrufen, um ein LightSensor-Objekt aus einem DeviceInformation.Idwert zu erstellen. Weitere Informationen finden Sie unter "Aufzählen von Geräten".

Wenn kein Lichtsensor erkannt wird, wird die Statusmeldung aktualisiert, um den Benutzer zu informieren.

Festlegen des Berichtsintervalls

Das Berichtsintervall wird im Konstruktor der Seite festgelegt. Dieser Code ruft das vom Gerät unterstützte Mindestintervall ab und vergleicht es mit einem angeforderten Intervall von 16 Millisekunden (was einer Aktualisierungsrate von 60 Hz entspricht). Wenn das unterstützte Mindestintervall größer als das angeforderte Intervall ist, legt der Code den Wert auf das Minimum fest. Andernfalls wird der Wert auf das angeforderte Intervall festgelegt.

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

Lesen von Sensordaten

Die neuen Lichtsensordaten werden im ReadingChanged-Ereignishandler erfasst. Jedes Mal, wenn der Sensortreiber neue Daten vom Sensor empfängt, übergibt er die Werte mithilfe dieses Ereignisses an Ihre App. In diesem Beispiel werden diese neuen Werte in die Textblöcke geschrieben, die im XAML-Code für die entsprechende Seite enthalten sind.

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