【问题标题】:Android Phonegap - How to Open Native Google Maps ApplicationAndroid Phonegap - 如何打开原生谷歌地图应用程序
【发布时间】:2013-03-22 14:59:57
【问题描述】:

我正在使用 Phonegap 开发一个 Android 应用程序,但无法弄清楚如何打开本地 Google 地图应用程序来显示方向。我通过插入 URL 打开地图没有任何问题,但打开应用程序让我很难过。到目前为止,我只能在iOS平台上找到Phonegap相关的开发建议。

我已将 Google 地图添加到白名单权限,在我的脚本标记中包含正确的 Cordova.js 文件和 google 地图链接,在我的 AndroidManifest.xml 文件中具有正确的权限,包含 Cordova.jar 和 Google Map API我的构建路径,res目录下有Phonegap xml文件夹,我的assets/www目录下有js文件,libs目录下有jar文件。

我想要完成的事情:

    1. 点击链接后,打开原生谷歌地图应用程序。如果设备上未安装应用程序,请通知用户未安装 Google 地图,必须安装。
    一个。我已经在检查网络连接并按照应有的方式进行处理。
2. 谷歌地图打开显示从用户当前位置到点击链接位置的路线。

以下示例在我的 Android 设备上的运行与在 iOS 上的运行方式完全相同,但显然无法打开 Google 地图应用程序的操作。

<a> href="http://maps.google.com/maps?q=TD Washington DC"><img src="img/ico_pin.png" />White House</a></a>

第二个示例通过包含结束位置添加到第一个示例,尽管我无法弄清楚如何插入当前位置。最重要的是,它仍然无法打开 Google 地图应用程序。

<a href="javascript:openMaps('daddr=1600+Pennsylvania+Ave+NW+Washington+DC+20500+USA');"><img src="img/ico_pin.png" />White House</a>

function openMaps(querystring) {
    var maproot = '';
    maproot = 'http://maps.google.com/maps?saddr=Current+Location&';
    window.location = maproot + querystring;
}

在下面的第三个示例中,我能够在我的应用程序中显示地图。它确实显示了正确的路线(从 A 点到 B 点的俯视图),但再次没有打开实际的 Google 地图应用程序。

<a id="whDirections" href="#mm_directions" onclick="getDirections()">
                    <img src="img/ico_pin.png" />White House</a>

<div data-role="content">
    <div class="ui-bar-c ui-corner-all ui-shadow" style="padding: 1em;">
        <div id="mapdirections_canvas" style="height: 300px;"></div>
    </div>
</div>

function getDirections() {
    var directionsService = new google.maps.DirectionsService();
    var map;
    var directionsDisplay = new google.maps.DirectionsRenderer();
    var mapOptions = {
        zoom: 9,
        zoomControl: true,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("mapdirections_canvas"), mapOptions);
    directionsDisplay.setMap(map);

    var myLatLng = new google.maps.LatLng(gmmLat, gmmLong);
    if (document.getElementById("whDirections")) {
        var request = {
            origin: myLatLng,
        destination: new google.maps.LatLng(38.897096, -77.036545), 
            travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(result); 
        }
    });
}

如果有人对此有链接或任何想法,我将非常感谢您的帮助。除了“Hello World”应用程序,这是我的第一个移动应用程序。请让我知道我是否遗漏了任何内容,或者我只是做错了。如果需要任何其他信息,请告诉我。

提前感谢您的帮助。

【问题讨论】:

  • 我认为谷歌地图会打开一个以 geo://.... 开头的链接。

标签: javascript android google-maps cordova geolocation


【解决方案1】:

试试这个,

function openLocation() {
    window.open("https://www.google.com/maps/dir/'" + start_latitude + ',' + start_longitude + "'/'" + end_latitude + ',' + end_longitude + "'", '_system');
}

【讨论】:

    【解决方案2】:

    如果您只想使用地址而不是经纬度来打开原生地图应用,这里有一个适用于 Android 和 iOS 的简单解决方案:

    function openNativeMapsApp(address) {
    
        console.log('Opening the native maps app...');
    
        var maps_schema;
    
        // Replace the following "if" line to your own way of identifying the system (android or ios)
        if ( app.device.android ) {
            maps_schema = encodeURI('geo://?q=' + address);
            window.open(maps_schema, "_system");
        } else {
            maps_schema = encodeURI('maps://?q=' + address);
            window.location.href = maps_schema;
        }
    }
    

    确保您的 config.xml 文件中有这些行:

    <allow-intent href="maps:*" />
    <access origin="maps:*" launch-external="yes" />
    

    下面的行是“Android 特定的”。如果不将它们放在&lt;platform name="android&gt; 标签内,可能会与iOS 发生冲突:

    <platform name="android">
        <access origin="*" />
        <allow-navigation href="*" />
        ...
    </platform>
    

    【讨论】:

      【解决方案3】:

      这是我用的:

      function (lat, lon) {
          var latLon = lat + ',' + lon;
      
          if (device.platform.toUpperCase() === "ANDROID") {
              window.open("geo:" + latLon, "_system");
          } else if (device.platform.toUpperCase() === "IOS") {
              window.open("http://maps.apple.com/?sll=" + latLon + "&z=100&t=k", "_system");
          }
      }
      

      注意:打开 Apple 地图时,sll=...t=k 表示我指定了准确的经度和纬度,t=k 表示我希望苹果地图显示卫星图像。此外,我只为 iOS 和 Android 编写代码,因此如果您使用其他平台,请务必明确检查每个平台!我很确定 Android 的 geo: 总是按您的预期工作,但我可能是错的。请记住:在真实设备上测试所有内容!

      【讨论】:

        【解决方案4】:

        Launch Navigator Cordova/Phonegap Plugin 可用于使用本地导航应用导航到目的地:-

        1. Android:谷歌导航器
        2. iOS:苹果地图/谷歌地图
        3. Windows Phone:必应地图

        【讨论】:

          【解决方案5】:

          适用于所有版本的 phonegap/cordova 或网络浏览器。 它将谷歌地图原生应用程序。

          用于从当前位置导航到 q - window.open("google.navigation:q=23.3728831,85.3372199&mode=d" , '_system');

          对于搜索 - window.open("geo:0,0?q=pizza" , '_system');

          在这里阅读 - https://developers.google.com/maps/documentation/android/intents

          【讨论】:

            【解决方案6】:

            这对我有用...

            var addressLongLat = yourLatitude+','+yourLongitude
            

            对于 Android 地图应用:

            window.open("geo:"+addressLongLat);
            

            对于 iOS 地图应用程序:

            window.open("http://maps.apple.com/?q="+addressLongLat, '_system');
            

            对于应用浏览器中的谷歌地图:

            window.open("http://maps.google.com/?q="+addressLongLat, '_system');
            

            【讨论】:

            【解决方案7】:

            这适用于科尔多瓦 3.4

            window.open("http://maps.google.com/?q=" + address, "_system");
            

            使用这种方法,谷歌地图会显示一个标记,并且可以使用文本地址,而不仅仅是经纬度坐标

            【讨论】:

            • 在android上,这会打开一个取代您的应用程序的窗口,无法关闭它,为了回到您的应用程序,您必须杀死它并重新打开。
            【解决方案8】:

            使用地理:输入 uri。

            <a href="geo:38.897096,-77.036545">open map</a>
            

            用户可以选择打开其设备上安装的任何地图应用程序。

            【讨论】:

            • 所以如果我想传入导航的开始和结束地址,我可以不做类似于我上面所做的事情吗?
              方向 function openMaps(querystring) { var地图根=''; var lat = position.coords.latitude; var lng = position.coords.longitude; var myLoc = new google.maps.Lat.Lng(lat, lng); maproot = "geo:" + myLoc + "?saddr=" + myLoc; window.location = maproot + 查询字符串; }
            • 地理 URI 方案 geo:latitude,longitude developer.android.com/guide/appendix/g-app-intents.html
            • Cordova 3.6.0 引入了第二个白名单,用于限制允许哪些 URL 启动外部应用程序。 Cordova 3.6.0 Whitelist Guide 所以需要在 config.xml 中明确添加:
            • 这是否也适用于原始地址,没有坐标?
            • 它对我不起作用。它在坐标区域打开谷歌地图,但没有任何标记和启动 gps 导航的可能性。我不得不退回到 google.com/maps 的查询,如下所示:google.com/maps/search/?api=1&query=39.34324,1.23434 知道为什么会发生这种情况吗?
            猜你喜欢
            • 2017-07-25
            • 1970-01-01
            • 2012-10-08
            • 2018-04-29
            • 2013-03-07
            • 1970-01-01
            • 1970-01-01
            • 2018-03-30
            • 2012-09-10
            相关资源
            最近更新 更多