17

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 マップ アプリケーションが開きます。アプリケーションがデバイスにインストールされていない場合は、Google マップがインストールされておらず、インストールする必要があることをユーザーに通知します。
      a. 私はすでにネットワーク接続を確認しており、それを行う必要があります。
    2. Google マップが開き、ユーザーの現在地からクリックしたリンクの場所までの道順が表示されます。

以下の例は、iOS とまったく同じように Android デバイスで動作しますが、アクション Google マップ アプリケーションを明らかに開きません。

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

2 番目の例は、現在の場所を挿入する方法を理解できませんでしたが、最後の場所を含めることで最初の例に追加されます。ただし、最も重要なことは、それでも 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;
}

以下の 3 番目の例では、アプリケーション内でマップを表示できます。正しいルート (ポイント A からポイント B までの俯瞰図から) は表示されますが、実際の G​​oogle マップ アプリケーションは開きません。

<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」アプリ以外では、これが初めてのモバイル アプリケーションです。私が何かを見逃した場合、またはこれを完全に間違っている場合はお知らせください。追加情報が必要な場合は、お知らせください。

助けてくれてありがとう。

4

8 に答える 8

61

geo: type uri を使用します。

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

ユーザーは、自分のデバイスにインストールされている任意のマッピング アプリケーションを開くことができます。

于 2013-04-01T15:23:03.583 に答える
6

phonegap/cordova または Web ブラウザーのすべてのバージョン。グーグルマップのネイティブアプリになります。

現在地から 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

于 2015-07-21T10:40:21.540 に答える
2

Launch Navigator Cordova/Phonegap プラグインを使用して、次のネイティブ ナビゲーション アプリを使用して目的地に移動できます。

  1. Android: Google ナビゲーター
  2. iOS: Apple マップ/Google マップ
  3. Windows Phone: Bing マップ
于 2015-09-01T08:42:19.307 に答える
1

緯度と経度の代わりに住所を使用してネイティブ マップ アプリを開きたいだけの場合は、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 固有」です。<platform name="android>タグ内に配置しないと、iOS との競合が発生する可能性があります。

<platform name="android">
    <access origin="*" />
    <allow-navigation href="*" />
    ...
</platform>
于 2019-12-18T20:20:47.273 に答える
0

これは私が使用するものです:

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は、正確な経度と緯度を指定していることを意味し、Apple マップにt=k衛星画像を表示することを意味します。また、私は iOS と Android についてのみ書いているので、他のプラットフォームを使用している場合は、それぞれを明示的に確認してください。geo:Androidは常に期待どおりに動作すると確信していますが、間違っている可能性もあります。覚えておいてください: 実際のデバイスですべてをテストしてください!

于 2017-02-24T20:13:32.377 に答える