Utiliser le capteur de luminosité
Découvrez comment utiliser le capteur de lumière ambiante pour détecter les changements d’éclairage.
API importantes
Prérequis
Vous devez être familiarisé avec le langage XAML (Extensible Application Markup Language), Microsoft Visual C# et les événements.
L’appareil ou l’émulateur que vous utilisez doit prendre en charge un capteur de lumière ambiante.
Créer une application simple de capteur léger
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.
Remarque
Pour une implémentation plus complète, consultez l’exemple de capteur de lumière.
Instructions
Créez un projet, en choisissant une application vide (Windows universel) à partir des modèles de projet Visual C# .
Ouvrez le fichier BlankPage.xaml.cs de votre projet et remplacez le code existant par ce qui suit.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;
using Windows.UI.Core; // Required to access the core dispatcher object
using Windows.Devices.Sensors; // Required to access the sensor platform and the ALS
// The Blank Page item template is documented at https://go.microsoft.com/fwlink/p/?linkid=234238
namespace App1
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class BlankPage : Page
{
private LightSensor _lightsensor; // Our app' s lightsensor object
// This event handler writes the current light-sensor reading to
// the textbox named "txtLUX" on the app' s main page.
private void ReadingChanged(object sender, LightSensorReadingChangedEventArgs e)
{
Dispatcher.RunAsync(CoreDispatcherPriority.Normal, (s, a) =>
{
LightSensorReading reading = (a.Context as LightSensorReadingChangedEventArgs).Reading;
txtLuxValue.Text = String.Format("{0,5:0.00}", reading.IlluminanceInLux);
});
}
public BlankPage()
{
InitializeComponent();
_lightsensor = LightSensor.GetDefault(); // Get the default light sensor object
// Assign an event handler for the ALS reading-changed event
if (_lightsensor != null)
{
// Establish the report interval for all scenarios
uint minReportInterval = _lightsensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_lightsensor.ReportInterval = reportInterval;
// Establish the even thandler
_lightsensor.ReadingChanged += new TypedEventHandler<LightSensor, LightSensorReadingChangedEventArgs>(ReadingChanged);
}
}
}
}
Vous devez renommer l’espace de noms dans l’extrait de code précédent avec le nom que vous avez donné à votre projet. Par exemple, si vous avez créé un projet nommé LightingCS, vous devez remplacer namespace App1
par namespace LightingCS
.
- Ouvrez le fichier MainPage.xaml et remplacez le contenu d’origine par le code XML suivant.
<Page
x:Class="App1.BlankPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App1"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid x:Name="LayoutRoot" Background="Black">
<TextBlock HorizontalAlignment="Left" Height="44" Margin="52,38,0,0" TextWrapping="Wrap" Text="LUX Reading" VerticalAlignment="Top" Width="150"/>
<TextBlock x:Name="txtLuxValue" HorizontalAlignment="Left" Height="44" Margin="224,38,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="217"/>
</Grid>
</Page>
Vous devez remplacer la première partie du nom de classe dans l’extrait de code précédent par l’espace de noms de votre application. Par exemple, si vous avez créé un projet nommé LightingCS, vous devez remplacer x:Class="App1.MainPage"
par x:Class="LightingCS.MainPage"
. Vous devez également remplacer xmlns:local="using:App1"
xmlns:local="using:LightingCS"
par .
- Appuyez sur F5 ou sélectionnez Démarrer>le débogage pour générer, déployer et exécuter l’application.
Une fois l’application en cours d’exécution, vous pouvez modifier les valeurs du capteur lumineux en modifiant la lumière disponible pour le capteur ou à l’aide des outils de l’émulateur.
- Arrêtez l’application en retournant à Visual Studio et en appuyant sur Maj+F5 ou sélectionnez Arrêter>le débogage pour arrêter l’application.
Explication
L’exemple précédent montre comment peu de code que vous devez écrire pour intégrer l’entrée de capteur léger dans votre application.
L’application établit une connexion avec le capteur par défaut dans la méthode BlankPage .
_lightsensor = LightSensor.GetDefault(); // Get the default light sensor object
L’application établit l’intervalle de rapport dans la méthode BlankPage . 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 définit la valeur sur la valeur minimale. Sinon, elle définit la valeur sur l’intervalle demandé.
uint minReportInterval = _lightsensor.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_lightsensor.ReportInterval = reportInterval;
Les nouvelles données de capteur de lumière sont capturées dans la méthode ReadingChanged . Chaque fois que le pilote du capteur reçoit de nouvelles données du capteur, il transmet la valeur à votre application à l’aide de ce gestionnaire d’événements. L’application inscrit ce gestionnaire d’événements sur la ligne suivante.
_lightsensor.ReadingChanged += new TypedEventHandler<LightSensor,
LightSensorReadingChangedEventArgs>(ReadingChanged);
Ces nouvelles valeurs sont écrites dans un TextBlock trouvé dans le code XAML du projet.
<TextBlock HorizontalAlignment="Left" Height="44" Margin="52,38,0,0" TextWrapping="Wrap" Text="LUX Reading" VerticalAlignment="Top" Width="150"/>
<TextBlock x:Name="txtLuxValue" HorizontalAlignment="Left" Height="44" Margin="224,38,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="217"/>