В моем предыдущем посте о миграции PhoneGap на Windows 8 я использовал API определения местоположения в качестве точки сравнения того, насколько похожи подходы к программированию. В этом посте я собираюсь изучить местоположение более подробно.
Информация о местоположении в Windows 8, как и в PhoneGap, может быть доступна либо в виде отдельных запросов, либо на нее можно подписаться по мере перемещения устройства. Информация о местоположении одинакова на обеих платформах (широта, долгота, высота и т. Д.), Так что это очень просто. Еще один интересный момент, касающийся данных о местоположении в приложении JavaScript для Windows 8, заключается в том, что вы можете использовать библиотеку WinJS для получения местоположения или, если вы хотите строго придерживаться HTML, вы можете использовать API геолокации W3C, доступный в HTML5 . В этом посте я собираюсь показать технику WinJS.
Чтобы получать постоянные обновления местоположения устройства, а не модель обратного вызова PhoneGap geolocation.watchPosition , Windows 8 использует модель обработчика событий. Таким образом, линия PhoneGap
var watchID = navigator.geolocation.watchPosition(onSuccess, onError);
становится
var loc = new Windows.Devices.Geolocation.Geolocator(); loc.addEventListener("positionchanged", onPositionChanged);
Когда вы больше не хотите получать обновления местоположения, вы просто удаляете EventListener таким же образом. В целом, рекомендуется отключать датчики, когда они вам не нужны, чтобы максимально увеличить заряд батареи и быстродействие приложений. Еще один способ продлить срок службы аккумулятора — это получить информацию о местоположении, не требуя точности GPS — во многих сценариях, таких как погода и местные события, вам просто нужно общее представление о местоположении пользователя, которое Windows 8 может определить с помощью триангуляции WiFi. На самом деле, многие устройства, которые будут работать под управлением Windows 8 (по крайней мере, на начальном этапе), вероятно, даже не будут иметь встроенный GPS, поэтому, по крайней мере, в обозримом будущем вы захотите использовать значение по умолчанию для DesiredAccuracy свойство Geolocator, которое является «низким».
Помимо события измененного положения , существует событие измененного состояния, которое сообщает вам о датчиках, а также о том, разрешено ли приложению получать доступ к данным местоположения. Ниже приведен пример кода, который может использоваться в обработчике событий с измененным статусом. Обратите внимание на случай, когда статус отключен.
switch (newStatus) { case PositionStatus.Ready: strStatus = "Location is available."; break; case PositionStatus.Initializing: strStatus = "Geolocation service is initializing."; break; case PositionStatus.NoData: strStatus = "Location service data is not available."; break; case PositionStatus.Disabled: strStatus = "Location services are disabled. Use the " + "Settings charm to enable them."; break; case PositionStatus.NotInitialized: strStatus = "Location status is not initialized because " + "the app has not yet requested location data."; break; case PositionStatus.NotAvailable: strStatus = "Location services are not supported on your system."; break; default: strStatus = "Unknown PositionStatus value (" + newStatus.ToString() + ")."; break; }
Говоря о разрешении доступа к данным о местоположении, как и о многих других телефонных платформах, которые поддерживает PhoneGap, Windows 8 требует от разработчика заявить, что он хочет использовать возможности определения местоположения устройства. Это, в свою очередь, уведомляет пользователя, когда он устанавливает и / или запускает приложение, о котором он хочет получить доступ к своему местоположению. Это легко указывается в файле манифеста приложения. Просто откройте файл package.appxmanifest в обозревателе решений и установите флажок Расположение.
Когда пользователь запускает ваше приложение в первый раз и пытается получить доступ к его местоположению, он фактически получает запрос о том, хотят ли они это разрешить. Подсказка прерывает приложение, поэтому она не может пропустить его.
Как только пользователь решает разрешить приложению доступ к своему местоположению, разрешение остается таким до тех пор, пока пользователь не отменит его в разделе настроек вашего приложения. Вы можете подумать: «Какие настройки раздела? Я не создал раздел настроек! » Одна из общих черт приложений Windows 8 — это раздел «Настройки», доступный из набора настроек. Эту панель пользователи могут открыть в Windows 8 в правой части экрана. Просто проведите пальцем с правой стороны или одновременно нажмите клавишу Windows и клавишу C. Поскольку ваше приложение указывало возможности определения местоположения, оно автоматически получит раздел настроек для прав доступа. Вы также можете добавить свои собственные разделы и контент на панель настроек, что делает ее действительно гибкой!
Еще один способ сбросить разрешения — удалить приложение и переустановить его. В целом это отлично подходит для разработки, потому что каждый раз, когда вы удаляете и переустанавливаете, вы получаете новые настройки и новые сохраненные данные.
Последний совет, с которым я вас оставлю, это. Когда вы разрабатываете свое приложение и запускаете его на своем локальном компьютере с Windows 8, оно будет использовать местоположение вашего компьютера, обычно триангулированное с помощью WiFi. Но если вы хотите протестировать свое приложение, как если бы вы находились в другом месте, вы можете сделать это, запустив его в Windows 8 Simulator. Просто выберите Simulator в верхней части окна Visual Studio. Это фактически приводит к подключению удаленного рабочего стола к локальной машине. На боковой стороне окна симулятора есть значок глобуса, и если вы щелкнете по нему, вы сможете напрямую ввести координаты, высоту и точность.
Так что, как вы можете сказать, довольно просто начать использовать службы определения местоположения в приложениях JavaScript для Windows 8, если вы делали это раньше в PhoneGap.