Schnellstart: Reaktion auf Änderungen der Lichtverhältnisse (C#)

Mithilfe des Umgebungslichtsensors können Sie Änderungen der Lichtverhältnisse mit einer App erkennen, die in C# geschrieben wurde.

Der Umgebungslichtsensor ist einer von vielen Sensoren, mit denen Apps auf Änderungen in der Umgebung des Benutzers reagieren können.

Roadmap: Wie hängt dieses Thema mit anderen zusammen? Siehe: Roadmap für Windows Store-Apps mit C# oder Visual Basic

Der Windows.Devices.Sensors-Namespace unterstützt ein LightSensor-Objekt, mit dem Apps die derzeitige Umgebungslichtintensität als LUX-Wert abrufen können. Weitere Informationen zu LUX-Werten finden Sie in der Dokumentation zur Sensor-API auf MSDN.

Ziel: Nach Abschluss dieses Schnellstarts verstehen Sie, wie Sie mithilfe des Umgebungslichtsensors Änderungen an den Lichtverhältnissen erkennen können.

Voraussetzungen

Sie sollten mit XAML, Visual C# und Ereignissen vertraut sein.

Das verwendete Gerät muss über einen Umgebungslichtsensor verfügen.

Zeitaufwand: 20 Minuten.

Anweisungen

1. Öffnen von Microsoft Visual Studio

Öffnen Sie eine Instanz von Visual Studio.

2. Erstellen eines neuen Projekts

Erstellen Sie ein neues Projekt, und wählen Sie aus den Projekttypen unter Visual C#/Windows Store den Typ Leere Anwendung aus.

3. Einfügen des C#-Codes der App

Öffnen Sie die Datei "BlankPage.xaml.cs" des Projekts, und ersetzen Sie den vorhandenen Code durch den folgenden.


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 http://go.microsoft.com/fwlink/p/?linkid=234238

namespace Application1
{
    /// <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);
            }

        }

    }
}


Sie müssen den Klassennamen im vorhergehenden Codeausschnitt durch den Namen der Klasse Ihrer App ersetzen. Wenn Sie z. B. ein Projekt mit dem Namen "Application2" erstellt haben, ersetzen Sie Folgendes:


namespace Application1

Ersetzen Sie den Code durch den folgenden.


namespace Accelerometer2

4. Einfügen des App-XAML

Öffnen Sie die Datei "BlankPage.xaml", und kopieren Sie den folgenden XML-Code in die Datei, sodass der Originalinhalt ersetzt wird.


<Page
    x:Class="Application1.BlankPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:Application1"
    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>

Sie müssen den ersten Teil des Klassennamens im vorhergehenden Codeausschnitt durch den Namen der Klasse Ihrer App ersetzen. Wenn Sie z. B. ein Projekt mit dem Namen "Application2" erstellt haben, ersetzen Sie Folgendes:


x:Class="Application1.BlankPage"

Ersetzen Sie den Code durch den folgenden.


x:Class="Application2.BlankPage"

5. Erstellen der App

Klicken Sie auf Erstellen > Projektmappe erstellen, um das Projekt zu erstellen.

6. Bereitstellen der App

Wählen Sie Erstellen > Projektmappe bereitstellen aus, um die Anwendung bereitzustellen.

7. Ausführen der App

  1. Schließen Sie Visual Studio.
  2. Starten Sie den Anwendungsstarter.
  3. Suchen Sie die App in der Liste der verfügbaren Apps, und wählen Sie die Option Starten aus.

Zusammenfassung

Im vorherigen Beispiel wird gezeigt, wie wenig Code Sie schreiben müssen, um Eingaben vom Umgebungslichtsensor in Ihre App zu integrieren.

Die App stellt eine Verbindung mit dem Standardsensor in der BlankPage-Methode her. Dies findet in der folgenden Zeile statt.


_lightsensor = LightSensor.GetDefault(); // Get the default light sensor object
  

Die App legt das Berichtsintervall in der BlankPage-Methode fest. Mit diesem Code wird das vom Gerät unterstützte Mindestintervall abgerufen und mit einem angeforderten Intervall von 16 Millisekunden verglichen (entspricht etwa einer Aktualisierungsrate von 60 Hz). 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 = _accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_accelerometer.ReportInterval = reportInterval;

Die neuen Daten des Umgebungslichtsensors werden in der ReadingChanged-Methode erfasst. Wenn der Sensortreiber neue Daten vom Sensor empfängt, übergibt er mithilfe dieser Funktion (oder des Ereignishandlers) die Werte der App. Die App registriert diesen Ereignishandler in der folgenden Zeile:


_lightsensor.ReadingChanged += new TypedEventHandler<LightSensor, 
LightSensorReadingChangedEventArgs>(ReadingChanged);

Diese neuen Werte werden in einen "TextBlock"-Abschnitt im XAML des Projekts geschrieben.


<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"/>


Verwandte Themen

LightSensor class
LightSensor-Beispiel
Roadmap für das Erstellen von Windows Store-Apps mit C#, C++ oder Visual Basic

 

 

Anzeigen:
© 2014 Microsoft. Alle Rechte vorbehalten.