我正在开发一个phonegap / cordova应用程序。有没有办法在浏览器视图中打开手机的原生导航应用程序?或者是否有从html5应用程序打开本机地图应用程序的最佳做法?或者它们都是特定于平台的吗?
我已经阅读了以下适用于某些Android版本
的地方<a href="geo:some address here" />Navigate to here</a>
并且这适用于iOS
<a href="http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino">Directions</a>
我很惊讶Phonegap没有实现这样的功能。
答案 0 :(得分:16)
您可以使用魔术&#34;地图打开iOS 5(谷歌地图)和iOS 6(Apple地图)上的原生导航应用程序:&#34;协议,例如window.location = "maps:daddr=50.4,-4.5"
但要在Android上启动原生Google Navigator应用,您需要使用phonegap插件。我为了自己的目的写了这个。
<强>更新强> 该插件现已针对Phonegap 3.x进行了更新,并支持Android,iOS和Windows Phone,包括在iOS上选择Google地图的选项。
答案 1 :(得分:7)
插件很棒!感谢分享! 我在我的应用程序中尝试过,但不幸的是我有Phonegap版本3.x而你的插件只适用于Phonegap 2.x :(
所以为了让它在Phonegap 3.x上运行,我从你的github repo获得了插件并进行了一些更改,以便它适用于3.x
可以从我的github repo下载修改后的Phonegap 3.x PhoneNavigator插件: https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git
如何将其集成到您的Phonegap 3.x项目中:
如何使用它:
//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");
}
);
答案 2 :(得分:7)
如上所述,以下适用于Galaxy S4 Android(刚刚测试过),用于启动Google地图/导航应用程序并使用:
<a href="geo:37.786971,-122.399677;u=35">Wikimedia Headquarters</a>
答案 3 :(得分:7)
为了记录,如果有人通过像我一样在谷歌上找到这个帖子,那么它直接适用于我,使用Ionic框架,做两件事:
在您的应用的myapp.config(...)中添加
$compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|geo):/);
(别忘了添加$ compileProvider作为依赖项)
在config.xml中,添加行
<access origin="geo:*" launch-external="yes"/>
这就是全部。
答案 4 :(得分:2)
Cordova 3.6.0引入了第二个白名单,用于限制允许哪些URL启动外部应用程序。在以前版本的Cordova中,所有非http URL(例如mailto:,geo:,sms:和intent)都被隐式允许作为标记的目标。由于应用程序可能泄露信息,如果XSS漏洞允许攻击者构建任意链接,则必须将这些URL列入白名单,从Cordova 3.6.0开始。
所以你需要在config.xml中明确添加:
<access origin="tel:*" launch-external="yes" />
<access origin="mailto:*" launch-external="yes" />