Реакция на изменение местоположения (HTML)
[ Эта статья адресована разработчикам приложений среды выполнения Windows для Windows 8.x и Windows Phone 8.x. При разработке приложений для Windows 10 см. раздел последняя документация]
В этом разделе рассказывается о том, как отвечать на изменения расположения пользователя.
Что необходимо знать
Технологии
- Windows Runtime
Необходимые условия
Вам должны быть знакомы HTML и JavaScript.
Инструкции
Этап 1: Проверка включения сведений о расположении
Для того чтобы ваше приложение могло получить доступ к данным о местоположении, необходимо включить на устройстве функцию Местоположение. Убедитесь, что в приложении Параметры включены следующие параметры конфиденциальности данных о расположении.
- Параметр Расположение для этого устройства...включен (неприменимо в Windows 10 Mobile)
- Параметр Расположение служб определения расположения включен
- В разделе Выберите приложения, которые могут использовать данные о вашем местоположении для вашего приложения установлено значение вкл.
Этап 2: Открытие Microsoft Visual Studio
Для создания нового проекта выберите Пустое приложение из типов проектов Приложения JavaScript/Магазина Windows.
Этап 3: Создание нового проекта
В диалоговом окне Новый проект выберите среди типов проектов JavaScript пустое приложение.
Этап 4: Включение функции определения местоположения
Дважды щелкните файл package.appxmanifest в обозревателе решений в проектах для Windows и Windows Phone и выберите вкладку Возможности. Затем выберите Местоположение в списке Возможности. Возможность устройства Location
будет добавлена к файлу манифеста пакета.
<Capabilities>
<!-- DeviceCapability elements must follow Capability elements (if present) -->
<DeviceCapability Name="location"/>
</Capabilities>
Этап 5: Замена кода JavaScript
В режиме "Использовать общий проект" откройте default.js (/js/default.js). Замените код в файле следующим кодом.
(function () {
"use strict";
var app = WinJS.Application;
var activation = Windows.ApplicationModel.Activation;
app.onactivated = function (args) {
if (args.detail.kind === activation.ActivationKind.launch) {
args.setPromise(WinJS.UI.processAll().
done(function () {
// Add an event handler to the button.
document.querySelector("#startTracking").addEventListener("click",
trackloc);
// Add an event handler to the button.
document.querySelector("#stopTracking").addEventListener("click",
stoptracking);
}));
}
};
var loc = null;
function trackloc() {
if (loc == null) {
loc = new Windows.Devices.Geolocation.Geolocator();
}
if (loc != null) {
loc.addEventListener("positionchanged", onPositionChanged);
loc.addEventListener("statuschanged", onStatusChanged);
// display initial status, in case location is turned off.
document.getElementById('geolocatorStatus').innerHTML =
getStatusString(loc.locationStatus);
}
}
function stoptracking() {
if (loc != null) {
loc.removeEventListener("positionchanged", onPositionChanged);
}
}
function onPositionChanged(args) {
var pos = args.position;
document.getElementById('latitude').innerHTML =
pos.coordinate.point.position.latitude;
document.getElementById('longitude').innerHTML =
pos.coordinate.point.position.longitude;
document.getElementById('accuracy').innerHTML =
pos.coordinate.accuracy;
document.getElementById('geolocatorStatus').innerHTML =
getStatusString(loc.locationStatus);
}
// Handle change in status to display an appropriate message.
function onStatusChanged(args) {
var newStatus = args.status;
document.getElementById('geolocatorStatus').innerHTML =
getStatusString(newStatus);
}
function getStatusString(locStatus) {
switch (locStatus) {
case Windows.Devices.Geolocation.PositionStatus.ready:
// Location data is available
return "Location is available.";
break;
case Windows.Devices.Geolocation.PositionStatus.initializing:
// This status indicates that a GPS is still acquiring a fix
return "A GPS device is still initializing.";
break;
case Windows.Devices.Geolocation.PositionStatus.noData:
// No location data is currently available
return "Data from location services is currently unavailable.";
break;
case Windows.Devices.Geolocation.PositionStatus.disabled:
// The app doesn't have permission to access location,
// either because location has been turned off.
return "Your location is currently turned off. " +
"Change your settings through the Settings charm " +
" to turn it back on.";
break;
case Windows.Devices.Geolocation.PositionStatus.notInitialized:
// This status indicates that the app has not yet requested
// location data by calling GetGeolocationAsync() or
// registering an event handler for the positionChanged event.
return "Location status is not initialized because " +
"the app has not requested location data.";
case Windows.Devices.Geolocation.PositionStatus.notAvailable:
// Location is not available on this version of Windows
return "You do not have the required location services " +
"present on your system.";
break;
default:
return "Unknown status.";
}
}
app.start();
})();
Этап 6: Добавление HTML-кода в приложения
Откройте файл default.html для проектов Windows и Windows Phone и скопируйте следующий HTML-код в теги BODY в этом файле.
<p>Geolocation Event Sample</p><br />
<span id="status"></span><br />
<button id="startTracking">Track Location</button><br />
<br />
<button id="stopTracking">Stop Tracking</button><br />
Latitude: <span id="latitude">Waiting for update...</span><br />
Longitude: <span id="longitude">Waiting for update...</span><br />
Accuracy (in meters): <span id="accuracy">Waiting for update...</span><br />
Location Status: <span id="geolocatorStatus"></span><br />
Этап 7: Сборка приложения
Выберите Сборка > Собрать решение, чтобы выполнить сборку проекта.
Этап 8: Тестирование приложения
- Чтобы проверить приложение, в меню Отладка выберите Начать отладку.
- При первом запуске образца вам будет предложено разрешить приложению использовать ваше местонахождение. Выберите параметр Разрешить.
- Чтобы узнать о текущем расположении, нажмите кнопку Получить расположение.
Замечания
Службы определения местоположения используют несколько различных источников для определения местоположения. Если GPS, вышки сотовой связи и сеть Wi-Fi недоступны, они используют IP-адрес. Обратите внимание, что в этом случае вы не сможете получать события обновления местоположения, так как данные IP-адреса обновляются нечасто.
Если для вашего приложения достаточно получить данные расположения только один раз и нет необходимости в подписке на обновления, используйте метод GetGeopositionAsync, как описано в разделе Краткое руководство: определение местоположения пользователя.
Связанные разделы
Пример определения географического положения в Windows 10