Мобильное приложение для навигации html5 для мобильных телефонов

Я разрабатываю приложение phonegap/cordova. Есть ли способ открыть собственное навигационное приложение телефона в окне браузера? Или есть лучшая практика по открытию приложений на основе карт из приложений html5? Или все они специфичны для платформы?

Я прочитал несколько мест, которые следуют за некоторыми версиями Android

<a href="geo:some address here" />Navigate to here</a>

и что это работает для iOS

<a href="#" onclick="location.href='http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino'; return false;">Directions</a>

Я поражен тем, что Phonegap не реализовал что-то вроде этого.

Ответы

Ответ 1

Вы можете открыть собственное навигационное приложение на iOS 5 (Google Maps) и iOS 6 (Apple Maps), используя магический протокол "maps:". window.location = "maps:daddr=50.4,-4.5"

Но для запуска родного приложения Google Navigator на Android вам нужно использовать плагин phonegap. Я написал это для своих целей.

Обновление Теперь плагин обновлен для Phonegap 3.x и поддерживает Android, iOS и Windows Phone, в том числе возможность предпочитать Google Maps на iOS.

Плагин находится здесь: https://github.com/dpa99c/phonegap-launch-navigator

Ответ 2

Плагин отличный! Спасибо, что поделился! Я попробовал это в своем приложении, но, к сожалению, у меня есть Phonegap версии 3.x, и ваш плагин работает только для Phonegap 2.x: (

Итак, чтобы заставить его работать с Phonegap 3.x, я получил плагин из вашего репозитория github и внес некоторые изменения, чтобы он работал на 3.x

Измененный плагин PhoneNavigator для Phonegap 3.x можно загрузить с моего репозитория github: https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git

Как интегрировать его в проект Phonegap 3.x:

  • Откройте окно консоли
  • Войдите в свой корень приложения Phonegap.
  • Затем выполните: phonegap local plugin add https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git
  • Скопируйте "phonenavigator.js" из репо (www/phonenavigator.js) в ваше приложение (например: yourapp/www)
  • включить в ваше приложение "phonenavigator.js":
  • Скопируйте "cordova.js" из репо (www/cordova.js) в ваше приложение (например: yourapp/www)
  • включить в ваше приложение "cordova.js":

Как использовать его:

//function declaration
function navigateTo (lat, lon, successFn, errorFn) {
    cordova.require('cordova/plugin/phonenavigator').doNavigate(lat, lon, successFn, errorFn);
}

//set lat and lon variables. Most probably read them from the UI
var latitude =  48.137607;
var longitude = 11.568569;

//call function
navigateTo(
    latitude,
    longitude,
    function(){
        console.log("Successfully opened navigator");
    },
    function(){
        console.log("Error opening navigator");
    }
);

Ответ 3

Как упоминалось выше, на Galaxy S4 Android (только что протестировало его) работает, чтобы открыть приложение Google Maps/Navigation и waze:

<a href="geo:37.786971,-122.399677;u=35">Wikimedia Headquarters</a>

Кредит: http://en.wikipedia.org/wiki/Geo_URI#Example

Также см. ответ здесь: fooobar.com/questions/307514/...

Ответ 4

Для записи, если кто-то найдет этот поток, посмотрев на Google, как я, он работал у меня напрямую, работая с Ionic framework, делая две вещи:

  • В myapp.config(...) вашего приложения добавьте

    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|geo):/);
    

    (не забудьте добавить $compileProvider как зависимость)

  • В файле config.xml добавьте строку

    <access origin="geo:*" launch-external="yes"/>
    

Что все.

Ответ 5

Кордова 3.6.0 вводит второй белый список для ограничения того, каким URL-адресам разрешено запускать внешние приложения. В предыдущих версиях Кордовы все URL-адреса, отличные от http, такие как mailto:, geo:, sms: и намерение, были неявно разрешены как цель тега. Из-за возможности приложения утечки информации, если уязвимость XSS позволяет злоумышленнику создавать произвольные ссылки, эти URL-адреса также должны быть в белом списке, начиная с Cordova 3.6.0.

Кордоба 3.6.0 Белые списки

Итак, вам нужно явно добавить файл config.xml:

  <access origin="tel:*" launch-external="yes" />
  <access origin="mailto:*" launch-external="yes" />