Language: HTML | XAML

Schnellstart: Bestimmen der aktuellen Richtung mit dem Kompass (C#)

Applies to Windows and Windows Phone

Mithilfe des Kompasses können Sie die aktuelle Richtung mit einer App erkennen, die in C# geschrieben wurde.

Apps können die aktuelle Richtung in Bezug auf den magnetischen oder geografischen Nordpol bestimmen.

Navigations-Apps bestimmen mit dem Kompass die Richtung, in die das Gerät weist, und passen damit die Karte an.

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

Ziel: Nach Abschluss dieses Schnellstarts verstehen Sie, wie Sie mithilfe des Kompasses Bewegungsänderungen erkennen können.

Voraussetzungen

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

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

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#/Store-Apps den Typ Leere App aus.

3. Ersetzen des C#-Codes

Öffnen Sie die Datei "MainPage.xaml.cs" des Projekts, und ersetzen Sie den vorhandenen Code und 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 compass


namespace App1
{
    /// <summary>
    /// An empty page that can be used on its own or navigated to within a Frame.
    /// </summary>
    public sealed partial class MainPage : Page
    {
        private Compass _compass; // Our app's compass object
 
        // This event handler writes the current compass reading to 
        // the textblocks on the app's main page.

        private async void ReadingChanged(object sender, CompassReadingChangedEventArgs e)
        {
           await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                CompassReading reading = e.Reading;
                txtMagnetic.Text = String.Format("{0,5:0.00}", reading.HeadingMagneticNorth);
                if (reading.HeadingTrueNorth.HasValue)
                    txtNorth.Text = String.Format("{0,5:0.00}", reading.HeadingTrueNorth);
                else
                    txtNorth.Text = "No reading.";
            });
        }

        public MainPage()
        {
            this.InitializeComponent();
           _compass = Compass.GetDefault(); // Get the default compass object

            // Assign an event handler for the compass reading-changed event
            if (_compass != null)
            {
                // Establish the report interval for all scenarios
                uint minReportInterval = _compass.MinimumReportInterval;
                uint reportInterval = minReportInterval > 16 ? minReportInterval : 16;
                _compass.ReportInterval = reportInterval;
                _compass.ReadingChanged += new TypedEventHandler<Compass, CompassReadingChangedEventArgs>(ReadingChanged);
            }
        }
    }
}


Sie müssen den Namespace im vorhergehenden Codeausschnitt durch den Namen ersetzen, den Sie für Ihr Projekt angegeben haben. Wenn Sie z. B. ein Projekt mit dem Namen CompassCS erstellt haben, ersetzen Sie namespace App1 durch namespace CompassCS.

4. Ersetzen des XAML-Codes

Ö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="22" Margin="8,18,0,0" TextWrapping="Wrap" Text="Magnetic Heading:" VerticalAlignment="Top" Width="104" Foreground="#FFFBF9F9"/>
        <TextBlock HorizontalAlignment="Left" Height="18" Margin="8,58,0,0" TextWrapping="Wrap" Text="True North Heading:" VerticalAlignment="Top" Width="104" Foreground="#FFF3F3F3"/>
        <TextBlock x:Name="txtMagnetic" HorizontalAlignment="Left" Height="22" Margin="130,18,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="116" Foreground="#FFFBF6F6"/>
        <TextBlock x:Name="txtNorth" HorizontalAlignment="Left" Height="18" Margin="130,58,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="116" Foreground="#FFF5F1F1"/>

     </Grid>
</Page>

Sie müssen den ersten Teil des Klassennamens im vorhergehenden Codeausschnitt durch den Namespace Ihrer App ersetzen. Wenn Sie z. B. ein Projekt mit dem Namen CompassCS erstellt haben, ersetzen Sie x:Class="App1.MainPage" durch x:Class="CompassCS.MainPage". Außerdem sollten Sie xmlns:local="using:App1" durch xmlns:local="using:CompassCS" ersetzen.

5. Erstellen, Bereitstellen und Ausführen der App

Drücken Sie F5, oder klicken Sie auf Debuggen > Debugging starten, um die App zu erstellen, bereitzustellen und auszuführen.

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

6. Beenden der App

  1. Drücken Sie ALT+TAB, um zu Visual Studio zu wechseln.
  2. Drücken Sie UMSCHALT+F5, oder klicken Sie auf Debuggen > Debugging beenden, um die App zu beenden.

Zusammenfassung

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

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


_compass = Compass.GetDefault(); // Get the default compass object

Die App legt das Berichtsintervall in der MainPage-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 Kompassdaten werden in der ReadingChanged-Methode erfasst. 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.


_compass.ReadingChanged += new TypedEventHandler<Compass, 
CompassReadingChangedEventArgs>(ReadingChanged);


Die neuen Werte werden in die TextBlock-Abschnitte im XAML-Code des Projekts geschrieben.


<TextBlock HorizontalAlignment="Left" Height="22" Margin="8,18,0,0" TextWrapping="Wrap" Text="Magnetic Heading:" VerticalAlignment="Top" Width="104" Foreground="#FFFBF9F9"/>
 <TextBlock HorizontalAlignment="Left" Height="18" Margin="8,58,0,0" TextWrapping="Wrap" Text="True North Heading:" VerticalAlignment="Top" Width="104" Foreground="#FFF3F3F3"/>
 <TextBlock x:Name="txtMagnetic" HorizontalAlignment="Left" Height="22" Margin="130,18,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="116" Foreground="#FFFBF6F6"/> 
 <TextBlock x:Name="txtNorth" HorizontalAlignment="Left" Height="18" Margin="130,58,0,0" TextWrapping="Wrap" Text="TextBlock" VerticalAlignment="Top" Width="116" Foreground="#FFF5F1F1"/>


Verwandte Themen

Compass class
Kompassbeispiel
Roadmap für das Erstellen von Apps mit C#, C++ oder VB

 

 

Anzeigen:
© 2014 Microsoft