2013-04-01 42 views
16

Tôi đang làm việc trên ứng dụng Android bằng Phonegap và gặp sự cố khi tìm cách mở ứng dụng Google Maps gốc để hiển thị chỉ đường. Tôi không có bất kỳ vấn đề gì khi mở một bản đồ bằng cách chèn một URL nhưng mở ứng dụng đã khiến tôi bối rối. Cho đến nay tôi chỉ có thể tìm thấy các đề xuất liên quan đến Phonegap để phát triển trên nền tảng iOS.Android Phonegap - Cách mở ứng dụng Google Maps gốc

Tôi đã thêm Google Maps vào các quyền trong danh sách cho phép, bao gồm tệp chính xác của Cordova.js và liên kết bản đồ google trong thẻ tập lệnh của tôi, có quyền chính xác trong tệp AndroidManifest.xml của tôi, bao gồm Cordova.jar và Google Map API trong đường dẫn xây dựng của tôi, có thư mục Phonegap xml trong thư mục res, tệp js trong thư mục asset/www của tôi, tệp jar trong thư mục libs.

Những gì tôi đang cố gắng để hoàn thành:

    1. Khi một liên kết được nhấp, mở ứng dụng Google Maps bản địa. Nếu ứng dụng không được cài đặt trên thiết bị, hãy thông báo cho người dùng biết rằng Google Maps chưa được cài đặt và phải được cài đặt.
      a. Tôi đã kiểm tra kết nối mạng và xử lý như nó phải được thực hiện.
    2. Google Maps mở hiển thị chỉ đường từ vị trí hiện tại của người dùng đến vị trí của liên kết được nhấp.

Ví dụ bên dưới hoạt động trên thiết bị Android của tôi giống hệt như trên iOS nhưng rõ ràng là không mở ứng dụng Google Maps.

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

Ví dụ thứ hai thêm vào đầu tiên bằng cách bao gồm vị trí kết thúc mặc dù tôi không thể tìm ra cách chèn vị trí hiện tại. Quan trọng nhất là, nó vẫn không mở ứng dụng Google Maps.

<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; 
} 

Trong ví dụ thứ ba bên dưới, tôi có thể hiển thị bản đồ trong ứng dụng của mình. Nó hiển thị lộ trình chính xác (từ chế độ xem từ trên cao từ điểm A đến điểm B) nhưng lại không mở ứng dụng Google Maps thực tế.

<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); 
     } 
    }); 
} 

Nếu có ai có liên kết hoặc ý tưởng về điều này, tôi thực sự đánh giá cao sự trợ giúp. Ngoài ứng dụng 'Hello World', đây là ứng dụng di động đầu tiên của tôi. Xin vui lòng cho tôi biết nếu tôi đã bỏ lỡ bất cứ điều gì hoặc nếu tôi chỉ làm điều này hoàn toàn sai. Nếu cần thêm bất kỳ thông tin nào, vui lòng cho tôi biết.

Cảm ơn bạn đã trợ giúp.

+1

Tôi nghĩ bản đồ google sẽ mở ra liên kết bắt đầu bằng địa lý: // .... –

Trả lời

50

Sử dụng địa lý: nhập uri.

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

và người dùng sẽ có lựa chọn mở bất kỳ ứng dụng bản đồ nào được cài đặt trên thiết bị của họ.

+1

Vì vậy, nếu tôi muốn chuyển đến địa chỉ bắt đầu và địa chỉ kết thúc để điều hướng, tôi có thể làm điều gì đó tương tự với những gì tôi đã làm ở trên không?
Directions chức năng openMaps (truy vấn chuỗi) { var maproot = ''; var lat = position.coords.latitude; var lng = position.coords.longitude; var myLoc = new google.maps.Lat.Lng (lat, lng); maproot = "geo:" + myLoc + "? Saddr =" + myLoc; \t window.location = maproot + querystring; } – Brian

+4

Địa lý lược đồ địa lý URI: vĩ độ, kinh độ http://developer.android.com/guide/appendix/g-app-intents.html –

+14

Cordova 3.6.0 giới thiệu danh sách trắng thứ hai, để hạn chế URL nào được cho phép để khởi chạy các ứng dụng bên ngoài. [Hướng dẫn danh sách trắng của Cordova 3.6.0] (http://cordova.apache.org/docs/en/3.6.0/guide_appdev_whitelist_index.md.html) Vì vậy, bạn cần thêm rõ ràng trong cấu hình.xml: delkant

-2

này hoạt động trong cordova 3,4

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

Với phương pháp này Google Maps hiển thị một dấu hiệu và có thể sử dụng địa chỉ văn bản, không chỉ tọa độ lat dài

+3

trên Android, thao tác này sẽ mở ra một cửa sổ thay thế ứng dụng của bạn, không có cách nào để đóng ứng dụng, để quay lại ứng dụng, bạn phải xóa nó và mở lại. –

13

Công việc này đối với tôi ...

var addressLongLat = yourLatitude+','+yourLongitude 

Đối với Android Maps App:

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

dành cho iOS Maps App:

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

Đối với Google Maps trong ứng dụng trình duyệt:

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

NẾU tôi lập trình một lần cho android/iPhone làm cách nào tôi có thể làm cho nó biết chức năng nào sẽ sử dụng tùy thuộc vào loại điện thoại mà người dùng đang sử dụng? – Mike

+0

thử device.platform: http://cordova.apache.org/docs/en/3.0.0/cordova_device_device.md.html#device.platform – ledragon

+0

Bạn cần kiểm tra nền tảng nào là trước đây. Sử dụng plugin Thiết bị: https://www.npmjs.com/package/cordova-plugin-device. Và ... if (device.platform == 'iOS') {// DO IOS NHỮNG ĐIỀU } else if (device.platform == 'Android') {// làm những việc ANDROID } Nền tảng nào bạn cần. –

4

Đối với tất cả phiên bản của PhoneGap/cordova hoặc trình duyệt web. Google sẽ lập bản đồ ứng dụng gốc.

Để điều hướng từ vị trí hiện tại đến q - window.open ("google.navigation: q = 23.3728831,85.3372199 & mode = d", '_system');

Để tìm kiếm - window.open ("geo: 0,0? Q = pizza", '_system');

đọc đây - https://developers.google.com/maps/documentation/android/intents

2

Launch Navigator Cordova/Phonegap Plugin có thể được sử dụng để điều hướng đến một đích sử dụng ứng dụng định vị bản địa trên: -

  1. Android: Google Navigator
  2. iOS: Apple Maps/Google Maps
  3. Điện thoại Windows: Bản đồ Bing
0

T mình là những gì tôi sử dụng:

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"); 
    } 
} 

Lưu ý: khi mở bản đồ Apple, sll=...t=k, có nghĩa là tôi đang xác định một kinh độ chính xác và vĩ độ, và t=k có nghĩa là tôi muốn bản đồ táo để hiển thị hình ảnh vệ tinh. Ngoài ra, tôi chỉ viết cho iOS và Android, vì vậy nếu bạn đang sử dụng các nền tảng khác, hãy đảm bảo kiểm tra rõ ràng cho từng nền tảng! Tôi chắc rằng geo: của Android luôn hoạt động như bạn mong đợi, nhưng tôi có thể sai. Hãy nhớ: kiểm tra mọi thứ trên một thiết bị thực!

Các vấn đề liên quan