Linguaggio: HTML | XAML

Come rispondere agli aggiornamenti della posizione (XAML)

Applies to Windows and Windows Phone

Questo argomento mostra come sottoscrivere aggiornamenti della posizione, in modo che l'app possa rispondere a modifiche della posizione.

Roadmap: che relazione c'è tra questo argomento e gli altri? Vedi:

Prerequisiti

È necessaria una conoscenza di XAML, Visual C# ed eventi.

L'accesso alla posizione deve essere abilitato nel dispositivo in uso.

Istruzioni

Passaggio 1: Aprire Microsoft Visual Studio

Apri un'istanza di Visual Studio.

Passaggio 2: Creare un nuovo progetto

Crea un nuovo progetto scegliendo un'Applicazione dai tipi di progetto Visual C# > Store.

Passaggio 3: Abilitare la funzionalità Posizione

Apri il file Package.appxmanifest del progetto, seleziona la scheda Funzionalità, quindi abilita la funzionalità Posizione apponendo un segno di spunta nella casella di controllo corrispondente.

Passaggio 4: Sostituire il codice XAML

Apri il file MainPage.xaml.cs del progetto e sostituisci il codice esistente con il seguente.


using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
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.Devices.Geolocation;
using Windows.UI.Core;

// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?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 MainPage : Page
    {
        private Geolocator geo = null;
        private CoreDispatcher _cd;

        public MainPage()
        {
            this.InitializeComponent();
            _cd = Window.Current.CoreWindow.Dispatcher;
        }
        private void button1_Click(object sender, RoutedEventArgs e)
        {
            if (geo == null)
            {
                geo = new Geolocator();
            }
            if (geo != null)
            {
                geo.MovementThreshold = 3.0;

                geo.PositionChanged +=
                    new TypedEventHandler<Geolocator,
                        PositionChangedEventArgs>(geo_PositionChanged);
            }
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            if (geo != null)
            {
                geo.PositionChanged -= new TypedEventHandler<Geolocator, PositionChangedEventArgs>(geo_PositionChanged);
            }
        }

        async private void geo_PositionChanged(Geolocator sender, PositionChangedEventArgs e)
        {
            await _cd.RunAsync(CoreDispatcherPriority.Normal, () =>
            {
                Geoposition pos = e.Position;
                textLatitude.Text = "Latitude: " + pos.Coordinate.Point.Position.Latitude.ToString();
                textLongitude.Text = "Longitude: " + pos.Coordinate.Point.Position.Longitude.ToString();
                textAccuracy.Text = "Accuracy: " + pos.Coordinate.Accuracy.ToString();
            });
        }
    }
}



Devi rinominare lo spazio dei nomi nel frammento di codice precedente usando il nome assegnato al progetto. Ad esempio, se hai creato un progetto denominato GeolocationSample, devi sostituire namespace App1 con namespace GeolocationSample.

Passaggio 5: Sostituire il codice XAML

Apri il file MainPage.xaml e copiaci il codice XML seguente, sostituendo il contenuto originale.



<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 Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
        <Button Content="Track Location" Click="button1_Click" 
         HorizontalAlignment="Left" Margin="11,158,0,0" Name="button1" 
         VerticalAlignment="Top" />

        <Button Content="Stop Tracking" Click="button2_Click" 
         HorizontalAlignment="Left" Margin="215,158,0,0" Name="button2" 
         VerticalAlignment="Top" />

        <TextBlock Margin="14,220,0,0" Text="Latitude" Name="textLatitude" />
        <TextBlock Margin="14,260,0,0" Text="Longitude" Name="textLongitude" />
        <TextBlock Margin="14,300,0,0" Text="Accuracy" Name="textAccuracy" />

    </Grid>
</Page>



Devi sostituire la prima parte del nome della classe nel frammento di codice precedente con lo spazio dei nomi della tua app. Ad esempio, se hai creato un progetto denominato GeolocationSample, devi sostituire x:Class="App1.MainPage" con x:Class="GeolocationSample.MainPage". Devi anche sostituire xmlns:local="using:App1" con xmlns:local="using:GeolocationSample".

Passaggio 6: Compilare l'app

Scegli Compila > Compila soluzione per compilare il progetto.

Passaggio 7: Testare l'app

  1. Scegli Avvia debug dal menu Debug per testare la soluzione.
  2. La prima volta che esegui l'esempio, ti verrà richiesto di confermare se l'app può utilizzare la posizione. Scegli l'opzione Consenti.
  3. Fai clic sul pulsante Recupera posizione per ottenere la posizione corrente.

Nota  Se i dati relativi alla posizione non vengono visualizzati, verifica quanto segue:

  • Assicurati di aver abilitato l'accesso alla posizione aprendo package.appxmanifest in Esplora soluzioni e selezionando Posizione nella scheda Funzionalità.
  • Se un amministratore ha disabilitato i servizi relativi alla posizione, la tua app non potrà accedere alla posizione dell'utente. Nel Pannello di controllo del, apri Modifica impostazioni posizione e verifica se l'opzione Attiva la piattaforma di localizzazione geografica di Windows è selezionata.
  • In Windows Phone, l'utente può disabilitare il rilevamento della posizione nell'app Impostazioni. Vai all'app Impostazioni, seleziona posizione e assicurati che l'interruttore Individua pozione sia attivato.

Osservazioni

L'esempio precedente mostra il breve codice da scrivere per ricevere aggiornamenti della posizione nell'app.

L'app aggiunge un gestore per l'evento PositionChanged. Questa operazione viene eseguita nella riga seguente:


geo.PositionChanged += new TypedEventHandler<Geolocator, 
                       PositionChangedEventArgs>(geo_PositionChanged);

Il gestore dell'evento è il metodo geo_PositionChanged, che recupera un oggetto Geoposition dagli argomenti dell'evento e quindi scrive i valori relativi a latitudine, longitudine e accuratezza nelle caselle di testo del codice XAML del progetto:


async private void geo_PositionChanged(Geolocator sender, PositionChangedEventArgs e)
{
    await _cd.RunAsync(CoreDispatcherPriority.Normal, () =>
    {
        Geoposition pos = e.Position;
        textLatitude.Text = "Latitude: " + pos.Coordinate.Point.Position.Latitude.ToString();
        textLongitude.Text = "Longitude: " + pos.Coordinate.Point.Position.Longitude.ToString();
        textAccuracy.Text = "Accuracy: " + pos.Coordinate.Accuracy.ToString();
    });
}


Gli oggetti TextBlock del codice XAML del progetto vengono definiti come segue:


<TextBlock Margin="14,220,0,0" Text="Latitude" Name="textLatitude" />
<TextBlock Margin="14,260,0,0" Text="Longitude" Name="textLongitude" />
<TextBlock Margin="14,300,0,0" Text="Accuracy" Name="textAccuracy" />


Esempio completo

Argomenti correlati

Esempio di georilevazione
Windows.Devices.Geolocation
Linee guida per l'utilizzo di dispositivi sensibili
Roadmap per la creazione di applicazioni con C#, C++ o VB

 

 

Mostra:
© 2014 Microsoft