Freigeben über


Verwenden des Beschleunigungsmessers

Erfahren Sie, wie Sie den Beschleunigungsmesser verwenden, um auf Benutzerbewegungen zu reagieren.

Wichtige APIs

Voraussetzungen

Sie sollten mit Extensible Application Markup Language (XAML), Microsoft Visual C# und Ereignissen vertraut sein.

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

Erstellen einer einfachen Beschleunigungsmesser-App

Eine einfache Spiele-App basiert auf einem einzelnen Sensor, dem Beschleunigungsmesser, als Eingabegerät. Diese Apps verwenden in der Regel nur eine oder zwei Achsen für die Eingabe. sie können aber auch das Shake-Ereignis als eine andere Eingabequelle verwenden.

Hinweis

Eine umfassendere Implementierung finden Sie im Beschleunigungsmesserbeispiel.

Anweisungen

  • Erstellen Sie ein neues Projekt, und wählen Sie eine leere App (Universelle Windows-App) aus den Visual C# -Projektvorlagen aus.

  • Öffnen Sie die MainPage.xaml.cs Datei Ihres Projekts, und ersetzen Sie den vorhandenen Code durch Folgendes.

    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;

    // Required to support the core dispatcher and the accelerometer

    using Windows.UI.Core;
    using Windows.Devices.Sensors;

    namespace App1
    {

        public sealed partial class MainPage : Page
        {
            // Sensor and dispatcher variables
            private Accelerometer _accelerometer;

            // This event handler writes the current accelerometer reading to
            // the three acceleration text blocks on the app' s main page.

            private async void ReadingChanged(object sender, AccelerometerReadingChangedEventArgs e)
            {
                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
                {
                    AccelerometerReading reading = e.Reading;
                    txtXAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationX);
                    txtYAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationY);
                    txtZAxis.Text = String.Format("{0,5:0.00}", reading.AccelerationZ);

                });
            }

            public MainPage()
            {
                this.InitializeComponent();
                _accelerometer = Accelerometer.GetDefault();

                if (_accelerometer != null)
                {
                    // Establish the report interval
                    uint minReportInterval = _accelerometer.MinimumReportInterval;
                    uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                    _accelerometer.ReportInterval = reportInterval;

                    // Assign an event handler for the reading-changed event
                    _accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer, AccelerometerReadingChangedEventArgs>(ReadingChanged);
                }
            }
        }
    }

Sie müssen den Namespace im vorherigen Codeausschnitt mit dem Namen umbenennen, den Sie ihrem Projekt gegeben haben. Wenn Sie beispielsweise ein Projekt mit dem Namen AccelerometerCS erstellt haben, ersetzen Sie es durch namespace AccelerometerCSnamespace App1 .

  • Öffnen Sie die Datei "MainPage.xaml", und ersetzen Sie den ursprünglichen Inhalt durch den folgenden XML-Code.
        <Page
        x:Class="App1.MainPage"
        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="#FF0C0C0C">
            <TextBlock HorizontalAlignment="Left" Height="25" Margin="8,20,0,0" TextWrapping="Wrap" Text="X-axis:" VerticalAlignment="Top" Width="62" Foreground="#FFEDE6E6"/>
            <TextBlock HorizontalAlignment="Left" Height="27" Margin="8,49,0,0" TextWrapping="Wrap" Text="Y-axis:" VerticalAlignment="Top" Width="62" Foreground="#FFF5F2F2"/>
            <TextBlock HorizontalAlignment="Left" Height="23" Margin="8,80,0,0" TextWrapping="Wrap" Text="Z-axis:" VerticalAlignment="Top" Width="62" Foreground="#FFF6F0F0"/>
            <TextBlock x:Name="txtXAxis" HorizontalAlignment="Left" Height="15" Margin="70,16,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="61" Foreground="#FFF2F2F2"/>
            <TextBlock x:Name="txtYAxis" HorizontalAlignment="Left" Height="15" Margin="70,49,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFF2EEEE"/>
            <TextBlock x:Name="txtZAxis" HorizontalAlignment="Left" Height="15" Margin="70,80,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFFFF8F8"/>

        </Grid>
    </Page>

Sie müssen den ersten Teil des Klassennamens im vorherigen Codeausschnitt durch den Namespace Ihrer App ersetzen. Wenn Sie beispielsweise ein Projekt mit dem Namen AccelerometerCS erstellt haben, ersetzen Sie es durch x:Class="AccelerometerCS.MainPage"x:Class="App1.MainPage" . Sie sollten auch durch xmlns:local="using:App1" xmlns:local="using:AccelerometerCS".

  • Drücken Sie F5, oder wählen Sie "Debuggen>starten" aus, um die App zu erstellen, bereitzustellen und auszuführen.

Sobald die App ausgeführt wird, können Sie die Beschleunigungsmesserwerte ändern, indem Sie das Gerät verschieben oder die Emulatortools verwenden.

  • Beenden Sie die App, indem Sie zu Visual Studio zurückkehren und UMSCHALT+F5 drücken, oder wählen Sie "Debuggen>beenden" aus, um die App zu beenden.

Erklärung

Im vorherigen Beispiel wird veranschaulicht, wie wenig Code Sie schreiben müssen, um Beschleunigungsmessereingaben in Ihre App zu integrieren.

Die App stellt eine Verbindung mit dem Standardbeschleuchungsmesser in der MainPage-Methode her.

_accelerometer = Accelerometer.GetDefault();

Die App richtet das Berichtsintervall innerhalb der MainPage-Methode ein. 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 = _accelerometer.MinimumReportInterval;
uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
_accelerometer.ReportInterval = reportInterval;

Die neuen Beschleunigungsmesserdaten werden in der ReadingChanged-Methode erfasst. Jedes Mal, wenn der Sensortreiber neue Daten vom Sensor empfängt, übergibt er die Werte mithilfe dieses Ereignishandlers an Ihre App. Die App registriert diesen Ereignishandler in der folgenden Zeile.

_accelerometer.ReadingChanged += new TypedEventHandler<Accelerometer,
AccelerometerReadingChangedEventArgs>(ReadingChanged);

Diese neuen Werte werden in die TextBlocks geschrieben, die im XAML-Code des Projekts enthalten sind.

<TextBlock x:Name="txtXAxis" HorizontalAlignment="Left" Height="15" Margin="70,16,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="61" Foreground="#FFF2F2F2"/>
 <TextBlock x:Name="txtYAxis" HorizontalAlignment="Left" Height="15" Margin="70,49,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFF2EEEE"/>
 <TextBlock x:Name="txtZAxis" HorizontalAlignment="Left" Height="15" Margin="70,80,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="53" Foreground="#FFFFF8F8"/>