Language: HTML | XAML

Schnellstart: Einrichten von Geofence-Bereichen (XAML)

Applies to Windows and Windows Phone

In diesem Thema werden Sie durch die Schritte zum Einrichten eines Geofence-Bereichs in der Windows-Runtime-App mit C++, C# oder Visual Basic geführt.

Roadmap: Wie hängt dieses Thema mit anderen zusammen? Weitere Informationen:

Einführung

Sie müssen einige Schritte ausführen, um den Geofence-Bereich einzurichten. Zusätzlich zur Festlegung der Zielregion müssen Sie auch sicherstellen, dass Sie über die passenden Standortberechtigungen verfügen. Zuletzt muss ein Ereignishandler eingerichtet werden, falls der Benutzer diese Berechtigungen ändert, während die App ausgeführt wird.

Durchführen der Überprüfung auf Standortberechtigungen

Als Erstes sollten Sie der App während der Initialisierung Code hinzufügen, um den Standort abzurufen. In Windows fordert das System den Benutzer bei der ersten Verwendung der API durch Ihre App auf, seine Zustimmung zur Nutzung des Standorts zu erteilen. Wenn Ihre App keine Berechtigung vom Benutzer hat, weisen Sie den Benutzer darauf hin. Beachten Sie, dass Sie auch ohne Standortberechtigungen einen Geofence-Bereich einrichten können. Sie erhalten jedoch erst Benachrichtigungen, nachdem die Berechtigungen aktiviert wurden.


async private void Initialize()
{
    try 
    {
        // Get a geolocator object 
        geolocator = new Geolocator();

        // Get cancellation token
        cts = new CancellationTokenSource();
        CancellationToken token = cts.Token;

        await geolocator.GetGeopositionAsync().AsTask(token);
 
        // other initialization for your app could go here
                                                                
    } 
    catch (UnauthorizedAccessException) 
    { 
        if (DeviceAccessStatus.DeniedByUser == accessInfo.CurrentStatus) 
        { 
            rootPage.NotifyUser("Location has been disabled by the user. Enable access through the settings charm.", NotifyType.StatusMessage); 
        } 
        else if (DeviceAccessStatus.DeniedBySystem == accessInfo.CurrentStatus) 
        { 
            rootPage.NotifyUser("Location has been disabled by the system. The administrator of the device must enable location access through the location control panel.", NotifyType.StatusMessage); 
        } 
        else if (DeviceAccessStatus.Unspecified == accessInfo.CurrentStatus) 
        { 
            rootPage.NotifyUser("Location has been disabled by unspecified source. The administrator of the device may need to enable location access through the location control panel, then enable access through the settings charm.", NotifyType.StatusMessage); 
        } 
    }
    catch (TaskCanceledException)
    {
        // task cancelled
    }
    catch (Exception)
    {
        if (geolocator.LocationStatus == PositionStatus.Disabled)
        {
            // On Windows Phone, this exception will be thrown when you call 
            // GetGeopositionAsync if the user has disabled locaton in Settings.
            rootPage.NotifyUser("Location has been disabled in Settings.");
        }

    } 
    finally
    {
        cts = null;
    }

}




  • Applies to Windows Phone

Hinweis  Unter Windows Phone ermitteln Sie, ob der Benutzer die Ortungsdienste in den Einstellungen deaktiviert hat, indem Sie die LocationStatus-Eigenschaft überprüfen. Wenn der Wert Disabled ist, sind die Ortungsdienste deaktiviert. Sie können diese Eigenschaft jederzeit überprüfen. Sie müssen nicht darauf warten, dass beim Versuch, auf die Position zuzugreifen, eine Ausnahme ausgelöst wird.

Durchführen der Überwachung auf Änderungen der Standortberechtigungen

Als Nächstes sollten Sie Berechtigungsänderungsereignisse registrieren, falls der Benutzer sich aus irgendeinem Grund entscheidet, die Standortberechtigungen zu deaktivieren. Fügen Sie zuerst der Initialisierungsmethode die Ereignishandler hinzu:


DeviceAccessInformation accessInfo;
accessInfo = DeviceAccessInformation.CreateFromDeviceClass(DeviceClass.Location);
accessInfo.AccessChanged += OnAccessChanged;



Behandeln Sie die Berechtigungsänderung dann, indem Sie den Benutzer darüber informieren, dass das Geofencing nicht funktioniert, wenn die Standortberechtigungen deaktiviert sind:


public async void OnAccessChanged(DeviceAccessInformation sender, DeviceAccessChangedEventArgs args)
{
    await Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
    {

        if (DeviceAccessStatus.DeniedByUser == args.Status)
        {
            rootPage.NotifyUser("Location has been disabled by the user. Enable access through the settings charm.", NotifyType.StatusMessage);
        }
        else if (DeviceAccessStatus.DeniedBySystem == args.Status)
        {
            rootPage.NotifyUser("Location has been disabled by the system. The administrator of the device must enable location access through the location control panel.", NotifyType.StatusMessage);
        }
        else if (DeviceAccessStatus.Unspecified == args.Status)
        {
            rootPage.NotifyUser("Location has been disabled by unspecified source. The administrator of the device may need to enable location access through the location control panel, then enable access through the settings charm.", NotifyType.StatusMessage);
        }
        else if (DeviceAccessStatus.Allowed == args.Status)
        {
            // clear status
            rootPage.NotifyUser("", NotifyType.StatusMessage);
        }
        else
        {
            rootPage.NotifyUser("Unknown device access information status", NotifyType.StatusMessage);
        }
    });
}




  • Applies to Windows Phone

Hinweis  Unter Windows Phone:

  • Die CurrentStatus-Eigenschaft, gibt nicht an, ob Ortungsdienste auf dem Gerät deaktiviert sind.
  • Das AccessChanged-Ereignis wird nie ausgelöst.
Diese APIs werden kompiliert, wenn Sie für eine Windows-App und eine Windows Phone-App den gleichen Code verwenden, sie sind aber nur in Windows nützlich.

Erstellen des Geofence-Bereichs

Nun können Sie einen Geofence-Bereich definieren und einrichten. Für einen Geofence-Bereich können z. B. die folgenden Werte festgelegt werden:

  • Id zur Identifizierung
  • Kreisförmige Zielregion, die per Geoshape definiert wird
  • MonitoredStates, mit denen angegeben wird, für welche Geofence-Ereignisse Sie Benachrichtigungen erhalten möchten: Betreten der definierten Region, Verlassen der definierten Region oder Entfernung des Geofence-Bereichs
  • SingleUse-Kennzeichen, mit dem der Geofence-Bereich entfernt wird, nachdem alle Zustände, auf die der Geofence-Bereich überwacht wird, erfüllt wurden
  • DwellTime, womit angegeben wird, wie lange sich der Benutzer innerhalb oder außerhalb des definierten Bereichs befinden muss, bevor das enter- oder exit-Ereignis ausgelöst wird
  • StartTime, womit angegeben wird, wann mit der Überwachung des Geofence-Bereichs begonnen wird
  • Duration der Überwachung des Geofence-Bereichs

private void CreateGeofence()
{
    Geofence geofence = null;

    string fenceKey = new string(Id.Text.ToCharArray());

    BasicGeoposition position;
    position.Latitude = Double.Parse(Latitude.Text);
    position.Longitude = Double.Parse(Longitude.Text);
    position.Altitude = 0.0;
    double radius = Double.Parse(Radius.Text);

    // the geofence is a circular region
    Geocircle geocircle = new Geocircle(position, radius);

    bool singleUse = (bool)SingleUse.IsChecked;

    // want to listen for enter geofence, exit geofence and remove geofence events
    // you can select a subset of these event states
    MonitoredGeofenceStates mask = 0;

    mask |= MonitoredGeofenceStates.Entered;
    mask |= MonitoredGeofenceStates.Exited;
    mask |= MonitoredGeofenceStates.Removed;

    // setting up how long you need to be in geofence for enter event to fire
    TimeSpan dwellTime;

    if ("" != DwellTime.Text)
    {
        dwellTime = new TimeSpan(ParseTimeSpan(DwellTime.Text, defaultDwellTimeSeconds));
    }
    else
    {
        dwellTime = new TimeSpan(ParseTimeSpan("0", defaultDwellTimeSeconds));
    }

    // setting up how long the geofence should be active
    TimeSpan duration;

    if ("" != Duration.Text)
    {
        duration = new TimeSpan(ParseTimeSpan(Duration.Text, 0));
    }
    else
    {
        duration = new TimeSpan(ParseTimeSpan("0", 0));
    }

    // setting up the start time of the geofence
    DateTimeOffset startTime;

    if ("" != StartTime.Text)
    {
        startTime = DateTimeOffset.Parse(StartTime.Text); 
    }
    else
    {
        // if you don't set start time in C# the start time defaults to 1/1/1601
        calendar.SetToNow();

        startTime = calendar.GetDateTime();
    }

    geofence = new Geofence(fenceKey, geocircle, mask, singleUse, dwellTime, startTime, duration);
    GeofenceMonitor.Current.Geofences.Add(geofence);

}



Verwandte Themen

Roadmaps
Roadmap für Windows-Runtime-Apps mit C# und Visual Basic
Roadmap für Windows-Runtime-Apps mit C++
UX-Design für Apps
Aufgaben
Schnellstart: Behandeln von Geofence-Benachrichtigungen im Vordergrund
Schnellstart: Durchführen der Überwachung auf Geofence-Ereignisse im Hintergrund
Schnellstart: Behandeln von Geofence-Benachrichtigungen über eine Hintergrundaufgabe
Referenz
Geoshape
Geofence
Geolocator
Weitere Ressourcen
Richtlinien für Geofencing

 

 

Anzeigen:
© 2014 Microsoft