2012-03-16 27 views
7

Khi tôi chạyĐịnh vị không chỉ dừng lại ở PhoneGap

window.onload = function() { 
    document.addEventListener("deviceready", getGeolocation); 
} 

function getGeolocation() { 
navigator.geolocation.getCurrentPosition(successCallback, errorCallback, {maximumAge: 0}); 
} 

hoặc

function getGeolocation() { 
watchGeoMarkerProcess = navigator.geolocation.watchPosition(updateCallback, errorCallback); 
} 

và sau đó

function updateCallback(position) { 
    if (position.coords.accuracy < 100) { 
      navigator.geolocation.clearWatch(watchGeoMarkerProcess); 
    } 
} 

trong ứng dụng của tôi trên iOS 5 sử dụng PhoneGap nó có vẻ gặp khó khăn, vì biểu tượng chỉ báo vị trí địa lý nằm trong thanh trên cùng và nó không bao giờ biến mất, điều tôi muốn nói GPS không được tắt. Ngoài ra, đôi khi tôi không nhận được bất kỳ coords nào cả, ném một lỗi hết thời gian.

Tôi không nghĩ có bất kỳ điều gì sai với mã vì nó hoạt động tốt như một ứng dụng web.

Bất kỳ ý tưởng nào?

+0

FYI, đây dường như là một vấn đề không ở mới nhất Cordova (ftw). Làm việc tốt cho tôi bây giờ bằng cách sử dụng 'ondeviceready' và' watchPosition' + 'clearWatch'. – jenswirf

Trả lời

3

navigator._geo là 'thực tế' thực hiện Tôi tin. Tôi đã nhìn thấy git cam kết gần đây, nơi họ đang cố gắng để vượt quá navigator.geolocation nhưng dường như không thành công trên iOS. Nhìn vào mã nguồn của điện thoại đã cho tôi ý tưởng để thử gọi thực sự thay thế.

Dưới đây là git commit: http://mail-archives.apache.org/mod_mbox/incubator-callback-commits/201203.mbox/%[email protected]%3E

Dưới đây là một chủ đề về các vấn đề: https://groups.google.com/forum/?fromgroups#!topic/phonegap/W32yYpV28W8

UPDATE: Tôi có một số thước đo thành công bây giờ: Sửa phonegap.js của bạn, nhận xét ra dòng 3451-3453 trông giống như sau: __proxyObj (navigator.geolocation, navigator._geo, ...

Bạn sẽ nhận được thông báo cho phép xấu xí .. nhưng vị trí sẽ hoạt động. thay đổi là bây giờ bạn sẽ sử dụng phát hiện vị trí của safari, chứ không phải PhoneGaps.

UPDATE2: ..và sự cố với PhoneGap hóa ra là xung đột với thư viện javascript khác, trong trường hợp này là dragdealer.js. Vì vậy, hãy kiểm tra kỹ các tên biến đáng ngờ như "Vị trí" hoặc "Vị trí" trong bất kỳ javascript nào khác mà bạn đang sử dụng. Đối với một số lý do xung đột này không phải là một vấn đề trên các nền tảng khác ngoài iOS.

+0

điều này được cho là sẽ được trả lời dưới đây. – Ryan

+0

Cảm ơn bạn đã xem.Quá xấu nó dẫn đến một vấn đề lớn khác có nghĩa là tôi không thể thực sự sử dụng nó. Đối với các xung đột JS, điều này không phải là vấn đề đối với tôi ít nhất vì tôi không sử dụng bất kỳ thư viện nào cả. – jenswirf

1

Đối với những gì đáng giá, tôi có cùng một vấn đề và các bản sửa lỗi này không hoạt động. Nhưng họ có thể cho bạn:

  • chắc chắn rằng bạn có được vị trí sau onDeviceReady() đã được gọi là
  • hãy thử sử dụng navigator._geo.getCurrentPosition
+0

Có một số giải pháp khác cho giải pháp 'navigator._geo.getCurrentPosition' đó không? Điều đó dường như là một số phương pháp tùy chỉnh mà tôi không có .. – jenswirf

0

Tôi gặp sự cố tương tự, mặc dù trên Android.

Thêm tùy chọn enableHighAccuracy gây ra nó để bắt đầu làm việc:

navigator.geolocation.getCurrentPosition(onSuccess, onError, {enableHighAccuracy:true}); 
Các vấn đề liên quan