Geolokalisering är en viktig aspekt av mobilutveckling. Lyckligtvis är det enkelt att hitta användarnas plats på Windows Phone 8! Denna handledning visar dig hur det görs genom att demonstrera Geolocator
klass.
Windows Phone SDK är en mycket kraftfull utvecklingsplattform som låter utvecklare skapa bra applikationer med Silverlight-ramen. Den senaste uppgraderingen av SDK till version 8.0 (Windows Phone 8) ger en mängd förändringar som gör det lättare för vissa generiska uppgifter att utföra. Ett av de områden som såg en förbättring i Windows Phone 8 är plats API. I tidigare versioner av Windows-telefonens SDK var det enkelt att få en användares nuvarande plats, men den nuvarande tekniken för att göra detta har blivit polerad och gjort lite mer direkt.
Den nya tekniken använder Microsofts ASYNC-metodsamtal, vilket förbättrar programmets prestanda samtidigt som man får tillgång till en användares plats. Låt oss dyka in och titta på det här nya sättet att komma åt den nuvarande platsen på Windows Phone 8.
För att försöka här handledningen antar jag att du har en grundläggande förståelse för Windows Phone-plattformen. Jag skulle också vilja tro att du har grundläggande förståelse för XAML och C # eftersom det här är språket vi ska skriva vår ansökan med. Du måste också ha Visual Studio 2012 eller högre med Windows Phone 8 SDK och en fungerande Windows Phone emulator installerad på din lokala dator. Du kan alternativt använda en verklig Windows Phone-enhet i stället för emulatorn.
Öppna Visual Studio och skapa ett nytt Windows Phone-projekt med Arkiv -> Ny -> Projekt
.
I den vänstra rutan i det nya projektfönstret måste du välja alternativet Windows Phone under kategorin Visual C #. Välj Windows Phone App i huvudfönstret och namnge projektet vad du vill och klicka sedan på OK när du är klar.
Nu när vi har skapat vår applikation kan vi fokusera på vårt huvudsyfte - gömma användarens nuvarande position och visa den på skärmen. I enkla termer kommer vår ansökan bara att ha två element, en knapp och en textblock. Knappen skulle vara vad vi skulle klicka för att berätta för vår app att fånga en användares nuvarande position, och TextBlock skulle visa geokoordinaterna för vår nuvarande plats.
Låt oss fortsätta och skapa vårt enkla användargränssnitt. Använd Visual Studio ToolBox för att dra och släppa en knapp och en textblock var som helst på skärmen. Vid denna tidpunkt bör din ansökan ha en TextBlock och en knapp som en del av användargränssnittet.
Det borde se ut som detta:
Jag rekommenderar starkt dig att ändra namnegenskapen för både din knapp och textblock för att vara förenlig med denna handledning. Ange namnet på knappen som MyButton och TextBlock för att vara MyTextBlock från ditt XAML-kodfönster.

Vid denna tidpunkt har vi vårt användargränssnitt redo och vi kan fortsätta och börja skriva logiken för vår ansökan. Dubbelklicka på knappen från designvy och Visual Studio ska automatiskt ta dig till kodvisningen med en metod som redan skapats.
privat tomt MyButton_Click (objekt avsändare, RoutedEventArgs e)
Den här genererade metoden är en delegat- eller återkopplingsmetod för klickhändelsen på vår knapp. Det innebär att koden inom den här metoden bara kommer att köras när vår knapp klickas. För att stämma överens med vårt mål skulle vi sätta koden som får vår nuvarande plats inom den här metoden eftersom vi vill att vår nuvarande plats bestäms när vår knapp klickas. För att uppnå detta ska vi använda GeoLocator och GeoPosition-klasserna.
GeoLocator-klassen hjälper till att få vår nuvarande plats och gör all interaktion med GPS / Nätverk och returnerar ett GeoPosition-objekt. Å andra sidan ger GeoPosition-klassen oss ett sätt att konsumera de returnerade data som GeoLocator returnerar. I grund och botten, tänk på GeoLocator som ett förfrågningsverktyg och GeoPosition-objektet som ett svarverktyg. Dessa klasser ger också utrymme för att anpassa våra önskemål och svar. Till exempel kan vi berätta för GeoLocator hur exakt (till närmaste mätare) vi vill att vår nuvarande plats ska vara och hur snabbt vi vill att vår nuvarande position pollades.
Jag har skrivit en metod som hjälper till att få vår nuvarande plats och jag kommer att förklara det i detalj lite senare. För nu lägger du till följande namnrymdreferens till din: Windows.Devices.Geolocation;
. Kopiera sedan kodfliken nedan och klistra in det i:
private async void GetCurrentLocation ()  Geolocator locationFinder = ny Geolocator   DesiredAccuracyInMeters = 50,  DesiredAccuracy = PositionAccuracy.Default ; försök Geoposition currentLocation = vänta locationFinder.GetGeopositionAsync (maximumAge: TimeSpan.FromSeconds (120), timeout: TimeSpan.FromSeconds (10)); String longitude = currentLocation.Coordinate.Longitude.ToString ("0.00"); String latitude = currentLocation.Coordinate.Latitude.ToString ("0.00"); MyTextBlock.Text = "Lång:" + longitud + "Lat:" + latitud;  catch (UnauthorizedAccessException)   MessageBox.Show ("Och Undantag Occured");  
Den här metoden gör allt arbete för oss och går vidare för att ställa in TextBlock-textegenskapen för oss. Låt oss noggrant undersöka vad metoden gör.
För det första skapar vi ett nytt GeoLocator Object som heter locationFinder
. Vi först sedan berätta hur exakt i meter vi vill att vår plats ska vara och vi bestämmer hur exakt vi vill ha resultatet.
Geolocator locationFinder = ny Geolocator  DesiredAccuracyInMeters = 50, DesiredAccuracy = PositionAccuracy.Default ;
Därefter instanserar vi ett GeoPosition-objekt som heter nuvarande position
inom ett försök / fångstblock vid eventuella undantag. Vi tilldelar sedan det till det returnerade GeoPosition-objektet som vårt GeoLocator-objekt returnerar med GetGeoPostionAsync
metod.
Geoposition currentLocation = väntar platsFinder.GetGeopositionAsync (maximumAge: TimeSpan.FromSeconds (120), timeout: TimeSpan.FromSeconds (10)); String longitude = currentLocation.Coordinate.Longitude.ToString ("0.00"); String latitude = currentLocation.Coordinate.Latitude.ToString ("0.00");
Slutligen får vi vår returlängd och latitud och sätter vår TextBlock för att visa dessa värden.
MyTextBlock.Text = "Lon:" + longitud + "Lat:" + latitud;
Det är så enkelt! Det finns några fler saker att göra innan vi testar vår ansökan. Först måste vi ringa vår GetCurrentLocation
metod inom delegationsmetoden för vår knapp som ursprungligen skapades för oss.
privat tomt MyButton_Click (objekt avsändare, RoutedEventArgs e) GetCurrentLocation ();
Det innebär att när vi klickar på vår knapp, vår GetCurrentLocation
Metoden kommer att utföras och vår nuvarande plats skulle hämtas för oss.
Slutligen måste vi begära tillåtelse att använda plats API på Windows Phone. Vi gör det genom att redigera vår manifestfil. I lösningarna utforska, leta efter en post titeln Egenskaper, och växla den för att se dess undergrupper. Ett av filnamnen på underenheterna ska vara WMAppManifest.xml. Dubbelklicka på det här och du kommer att se en GUI med fyra flikar, en av dessa har titeln Capabilities. Välj den fliken och du ska se något så här:
Kontrollera nu alternativet ID_CAP_LOCATION
om det inte är markerat och spara ditt projekt (CTRL + S). Då kan du stänga WMAppManifest.xml-fönstret. Det vi just har gjort begärs uttryckligen tillåtelse för att vår App ska kunna använda Windows Phone GPS / Location-verktyget. Med det gjort kan vi nu köra vår ansökan för första gången!
Om du använder en fysisk Windows-telefonenhet för testning, kontrollerar du att platsen är aktiverad i inställningen och har en giltig Internetanslutning via ett Wifi- eller mobilnätverk. Detta är mycket viktigt och obligatoriskt för vår ansökan till arbete. Om du använder en Windows Phone Emulator, se till att Platsen är aktiverad också på Emulatorn och att Internetanslutningen är en fungerande.
För att starta programmet, leta efter Green Play-knappen på den visuella studiomenyn och välj din emulator eller Enhetsalternativ om du använder en handenhet. Se till att lösningskonfigurationen på höger sida av knappen är inställd på Debug.
Klicka på den gröna knappen för att starta programmet. Appen ska starta och visa sidan vi tog fram vårt användargränssnitt. Klicka nu på knappen för att beordra appen för att få våra aktuella platskoordinater och du bör presenteras med ett resultat som ser ut så här:
Nu har du kanske märkt att vi framgångsrikt har uppnått det vi ställt upp för att uppnå och vår nuvarande plats visas för oss. Du kan se hur enkelt det var för att uppnå detta med en sådan minimal programmering! Det här är en väldigt enkel, men ändå viktig funktion i utvecklingen av Windows Phone. Ta det lugnt med de anpassningsbara inställningarna för GeoLocator och GeoPosition-klasserna. Tack för att du läser!