Поделиться через


Реакция на изменение местоположения (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: Тестирование приложения

  1. Чтобы проверить приложение, в меню Отладка выберите Начать отладку.
  2. При первом запуске образца вам будет предложено разрешить приложению использовать ваше местонахождение. Выберите параметр Разрешить.
  3. Чтобы узнать о текущем расположении, нажмите кнопку Получить расположение.

Замечания

Службы определения местоположения используют несколько различных источников для определения местоположения. Если GPS, вышки сотовой связи и сеть Wi-Fi недоступны, они используют IP-адрес. Обратите внимание, что в этом случае вы не сможете получать события обновления местоположения, так как данные IP-адреса обновляются нечасто.

Если для вашего приложения достаточно получить данные расположения только один раз и нет необходимости в подписке на обновления, используйте метод GetGeopositionAsync, как описано в разделе Краткое руководство: определение местоположения пользователя.

Связанные разделы

Пример определения географического положения в Windows 10

Пример определения географического положения в Windows 8.1

Windows.Devices.Geolocation