Använd ljussensorn

Lär dig hur du använder sensorn för omgivande ljus för att upptäcka förändringar i belysningen.

Det här exemplet skapar en enkel app som förlitar sig på en ljussensor som en indataenhet. En sensor för omgivande ljus är en av flera typer av miljösensorer som gör det möjligt för appar att svara på ändringar i användarens miljö.

Note

Den här artikeln fokuserar på kod som visar hur du använder en ljussensor. En översikt över ljussensorn finns i Sensorer: Ljussensor.

Förutsättningar

Du bör känna till ljussensorn och dess användning. Se Sensorer: Ljussensor.

Enheten eller emulatorn som du använder måste ha stöd för en sensor för omgivande ljus.

Exempelkod

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>

När appen är igång kan du ändra ljusvärdena genom att täcka över och frilägga ljussensorn.

I föregående exempel visas den viktiga kod som du behöver skriva för att integrera ljussensorindata i din app.

Anslut till sensorn

Anropa metoden GetDefault för att upprätta en anslutning till standardljussensorn.

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

Du kan också anropa FromIdAsync för att skapa ett LightSensor-objekt från ett DeviceInformation.Id värde. Mer information finns i Räkna upp enheter.

Om ingen ljussensor har identifierats uppdateras statusmeddelandet för att informera användaren.

Ange rapportintervallet

Rapportintervallet anges i sidans konstruktor. Den här koden hämtar det minsta intervall som stöds av enheten och jämför det med ett begärt intervall på 16 millisekunder (vilket motsvarar en uppdateringshastighet på 60 Hz). Om det minsta intervall som stöds är större än det begärda intervallet anger koden värdet till minimum. Annars anges värdet till det begärda intervallet.

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

Läs sensordata

Nya ljussensordata samlas in i händelsehanteraren ReadingChanged . Varje gång sensordrivrutinen tar emot nya data från sensorn skickar den värdena till din app med den här händelsen. I det här exemplet skrivs dessa nya värden till de textblock som finns i XAML för motsvarande sida.

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