Розробка програм для Windows Phone/Географічне положення
Із дозволу користувача, програма Windows Phone може отримати інформацію про географічне положення телефону, використовуючи технологію Assisted-GPS, або коротко — A-GPS.
A-GPS система навігації визначає місце розташування отримуючи інформацію про розташування веж мобільного зв'язку або мережі.
Для того, щоб включити цю опцію в вашій програмі необхідно додати відповідний тег у файл WMAppManifest.xml:
<Capability Name="ID_CAP_LOCATION" />
До проекту необхідно підключити збірку System.Device, а у коді прописати дерективу using для простору імен System.Device.Location. Клас який вам допомагає отримати інформацію про місце розташування називається GeoCoordinateWatcher. Він дозволяє отримувати інформацію з заданою точністю, яка задається в конструкторі класу у вигляді варіантів представленими перечисленням GeoPositionAccuracy, яке має два значення Default і High.
Так само як при роботі з акселерометром, вам необхідно додати обробник події PositionChanged і визвати метод Start. У інформації, яка передається коду в методі обробки події використовуючи об'єкт GeoCoordinate містяться такі дані:
- Latitude - широта, приймає значення типу double у проміжку від –90 до 90 градусів;
- Longitude - довгота , приймає значення типу double у проміжку від –180 до 180 градусів;
- Altitude - висота у форматі double;
- HorizontalAccuracy і VerticalAccuracy - точність вертикальних і горизонтальних координат;
- Course - азімут, значення типу double у проміжку від 0 до 360 градусів;
- Speed - швидкість руху. число типу double;
- IsUnknown - змінна типу Boolean, яка приймає значення true, якщо Latitude і Longitude не є числом;
Якщо програма не має доступу до функції визначення місцерозташування, тоді значення змінних Latitude і Longitude буде дорівнювати Double.NaN, а IsUnknown прийме значення true.
Приклад виводу тексту із координатами у програмі XNA:
protected override void Initialize()
{
GeoCoordinateWatcher geoWatcher = new GeoCoordinateWatcher();
geoWatcher.PositionChanged += OnGeoWatcherPositionChanged;
geoWatcher.Start();
base.Initialize();
}
void OnGeoWatcherPositionChanged(object sender, GeoPositionChangedEventArgs<GeoCoordinate> args) {
text = String.Format("Latitude: {0:F3}\r\n" +
"Longitude: {1:F3}\r\n" +
"Altitude: {2}\r\n\r\n" +
"{3}",
args.Position.Location.Latitude,
args.Position.Location.Longitude,
args.Position.Location.Altitude,
args.Position.Timestamp);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Navy);
spriteBatch.Begin();
spriteBatch.DrawString(kootenay14, text, textPosition, Color.White);
spriteBatch.End();
base.Draw(gameTime);
}
Примітка: деталі програми, які стосуються виводу тексту на екран не приведені у програмі. (див. Створення першої XNA програми)
Література
[ред.]- Programming Windows Phone 7, Charles Petzold