Vývoj aplikací na Windows Phone 7
Dlouhodobá maturitní práce 2011/2012
Představení platformy
Jak začít
Zivotní cyklus
První aplikace
Uživatelské rozhraní
Ukázky aplikaci
Lokalizační služby
Aplikace lokalizační služby slouží k zjišťování zeměpisné šířky a délky za pomoci GeoCoordinateWatcheru. Jsou zde implementovány posluchače, které se volájí po změně stavu GeoCoordinateWatcher (Initializing, Ready, Disabled, NoData) nebo po změně polohy zařízení o 10 kilometrů.
Zdrojový kód aplikace lokalizační služby:
namespace Geoposition { public partial class MainPage : PhoneApplicationPage { //Přiřazení nové instance GeoCoordinateWatcher s výchozím nastavením přesnosti GeoCoordinateWatcher geoWatcher; //Konstruktor public MainPage() { InitializeComponent(); } /// <summary> /// metoda sloužící k zjištění součastné polohy /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_lokace_Click(object sender, RoutedEventArgs e) { spustitLokalizacniSluzbu(GeoPositionAccuracy.Default); //zavolání metody spustitLokalizacniSluzbu() s parametrem přesnost } /// <summary> /// metoda spouštící lokalizační službu /// </summary> /// <param name="accuracy"></param> private void spustitLokalizacniSluzbu(GeoPositionAccuracy accuracy) { //načtení nové instance třídy GeoCoordinateWatcher s výchozím nastavením přesnosti geoWatcher = new GeoCoordinateWatcher(accuracy); //Minimální vzdálenost změny polohy zařízení, aby došlo k zavolání geoWatcher_PositionChanged geoWatcher.MovementThreshold = 10; //Volá se, pokud dojde ke změně objektu GeoWatcher geoWatcher.StatusChanged += new EventHandler<GeoPositionStatusChangedEventArgs>(geoWatcher_StatusChanged); //Volá se, pokud dojde ke změně zeměpisné šířky a délky geoWatcher.PositionChanged += new EventHandler<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher_PositionChanged); geoWatcher.Start(); //Získání informací podle současné plohy } /// <summary> /// posluchač na změnu polohy objektu getWatcher (pohyb o 10 km) /// </summary> /// <param name="sender"></param> /// <param name="geoPositionChanged"></param> void geoWatcher_PositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> geoPositionChanged) { //zjištění zeměpisné šířky a její následné vložení do textBlocku txtb_zemepisDelka.Text = geoPositionChanged.Position.Location.Latitude.ToString("0.000"); //zjištění zeměpisné délky a její následné vložení do textBlocku txtb_zemepisSirka.Text = geoPositionChanged.Position.Location.Longitude.ToString("0.000"); } /// <summary> /// posluchač na změnu stavu objektu geoWatcher /// </summary> /// <param name="sender"></param> /// <param name="GeoPositionStatusChanged"></param> void geoWatcher_StatusChanged(object sender, GeoPositionStatusChangedEventArgs GeoPositionStatusChanged) { switch (GeoPositionStatusChanged.Status) { case GeoPositionStatus.Initializing: // Inicializace lokalizační služby txtb_status.Text = "Inicializace lokalizační služby"; break; case GeoPositionStatus.Ready: // Přijmání dat txtb_status.Text = "Přijmání dat"; break; case GeoPositionStatus.Disabled: // Lokalizační služby jsou vypnuty nebo nejsou podporovány txtb_status.Text = "Lokalizační služby nejsou podporovány"; break; case GeoPositionStatus.NoData: // Údaje nejsou k dispozici txtb_status.Text = "Údaje nejsou k dispozici"; break; } } /// <summary> /// Metoda zastavení lokalizačních služeb /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void btn_zastavit_Click(object sender, RoutedEventArgs e) { if (geoWatcher != null) //podmínka, která zjišťuje, zda jsou lokalizační služby stále používány { geoWatcher.Stop(); //zastavení získávání dat z lokalizačních služeb txtb_status.Text = "Lokalizační služby jsou vypnuty"; } } } }
Zdrojový kód souboru MainPage.xaml:
<Grid x:Name="LayoutRoot" Background="Transparent"> <Grid.RowDefinitions> <RowDefinition Height="Auto"/> <RowDefinition Height="*"/> </Grid.RowDefinitions> <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28"> <TextBlock x:Name="ApplicationTitle" Text="GeoLocation" Style="{StaticResource PhoneTextNormalStyle}"/> <TextBlock x:Name="PageTitle" Text="Lokalizační služby" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}" FontSize="50" /> </StackPanel> <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> <TextBlock Height="27" HorizontalAlignment="Left" Margin="12,20,0,0" Name="textBlock2" Text="Zeměpisná délka: " VerticalAlignment="Top" Width="246" /> <TextBlock Height="44" HorizontalAlignment="Left" Margin="183,14,0,0" Name="txtb_zemepisDelka" Text="" VerticalAlignment="Top" Width="246" /> <Button Content="Zjisti lokaci" Height="72" HorizontalAlignment="Left" Margin="220,164,0,0" Name="btn_lokace" VerticalAlignment="Top" Width="209" Click="btn_lokace_Click" /> <TextBlock Height="27" HorizontalAlignment="Left" Margin="12,0,0,545" Name="textBlock3" Text="Zeměpisná šířka" VerticalAlignment="Bottom" Width="246" /> <TextBlock Height="44" HorizontalAlignment="Left" Margin="183,64,0,0" Name="txtb_zemepisSirka" Text="" VerticalAlignment="Top" Width="246" /> <TextBlock Height="27" HorizontalAlignment="Left" Margin="12,0,0,495" Name="textBlock5" Text="Status:" VerticalAlignment="Bottom" Width="246" /> <TextBlock Height="44" HorizontalAlignment="Left" Margin="183,114,0,0" Name="txtb_status" Text="Lokalizační služba je vypnuta" VerticalAlignment="Top" Width="246" Opacity="2" /> <Button Content="Zastavit" Height="72" HorizontalAlignment="Left" Margin="220,242,0,0" Name="btn_zastavit" VerticalAlignment="Top" Width="209" Click="btn_zastavit_Click" /> </Grid> </Grid>
Ukázka aplikace využívající lokalizační služby ke stažení
zde
.