Utiliser le capteur de luminosité

Découvrez comment utiliser le capteur de lumière ambiante pour détecter les changements d’éclairage.

Cet exemple crée une application simple qui s’appuie sur un capteur lumineux en tant qu’appareil d’entrée. Un capteur de lumière ambiante est l’un des différents types de capteurs environnementaux qui permettent aux applications de répondre aux changements dans l’environnement de l’utilisateur.

Note

Cet article se concentre sur le code qui montre comment utiliser un capteur lumineux. Pour obtenir une vue d’ensemble du capteur de lumière, consultez Capteurs : capteur de lumière.

Prerequisites

Vous devez être familiarisé avec le capteur de lumière et ses utilisations. Voir Capteurs : Capteur de lumière.

L’appareil ou l’émulateur que vous utilisez doit prendre en charge un capteur de lumière ambiante.

Exemple de code

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>

Lorsque l’application s’exécute, vous pouvez modifier les valeurs de lumière en couvrant et en découvrant le capteur de lumière.

L’exemple précédent illustre le code essentiel que vous devez écrire pour intégrer l’entrée du capteur léger dans votre application.

Se connecter au capteur

Appelez la méthode GetDefault pour établir une connexion avec le capteur lumineux par défaut.

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

Vous pouvez également appeler FromIdAsync pour créer un objet LightSensor à partir d’une valeur DeviceInformation.Id. Pour plus d’informations, consultez Énumérer les appareils.

Si aucun capteur de capteur lumineux n’est détecté, le message d’état est mis à jour pour informer l’utilisateur.

Définir l’intervalle de rapport

L’intervalle de rapport est défini dans le constructeur de la page. Ce code récupère l’intervalle minimal pris en charge par l’appareil et le compare à un intervalle demandé de 16 millisecondes (ce qui correspond approximativement à un taux d’actualisation de 60-Hz). Si l’intervalle minimal pris en charge est supérieur à l’intervalle demandé, le code fixe la valeur à la valeur minimale. Sinon, elle définit la valeur à l’intervalle demandé.

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

Lire les données du capteur

Les nouvelles données de capteur de lumière sont capturées dans le gestionnaire d’événements ReadingChanged . Chaque fois que le pilote de capteur reçoit de nouvelles données du capteur, il transmet les valeurs à votre application à l’aide de cet événement. Pour cet exemple, ces nouvelles valeurs sont écrites dans les blocs de texte trouvés dans le code XAML pour la page correspondante.

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