2013-09-25 76 views
5

Tôi có ứng dụng Phonegap. Tôi bao gồm cordova.js trong HTML (nhưng không phải trong thư mục www), Tôi đang chờ đợi deviceready để bị sa thải, và sau đó tôi gọiiOS Sử dụng hộp thoại Quyền vị trí hiện tại được hiển thị hai lần trong ứng dụng Phonegap

navigator.geolocation.getCurrentPosition(successCallback,failCallback); 

Tôi nhận được cả hai phiên bản của hộp thoại (trong này thứ tự):

Native Dialog - http://i.stack.imgur.com/H5y1O.png
HTML Dialog - http://i.stack.imgur.com/XbcmR.png

Trả lời

5

Nếu bạn đang sử dụng phiên bản 3+ của PhoneGap, chắc chắn rằng bạn đang đúng bao gồm các plugin.

Từ PhoneGap v3.0.0 API Docs:

Tính đến phiên bản 3.0, Cordova thực hiện các API cấp thiết bị như plugins. Sử dụng lệnh plugin của CLI, được mô tả trong Giao diện dòng lệnh, để thêm hoặc xóa tính năng này cho một dự án

+0

AH! đây là hoàn hảo. Tôi không thể tin rằng tôi đã bỏ lỡ điều này. – bendalton

+0

@brandonjp Nếu bạn đã bỏ lỡ cài đặt plugin thì làm cách nào để hai thông báo xuất hiện cho bạn? Tôi đã cài đặt các plugin như nó đã được ghi chép trong tài liệu và tôi vẫn có cả hai thông điệp được đề cập. Bất kỳ ý tưởng? –

+0

Xin chào, Cách vô hiệu hóa thông báo cho phép vị trí trên iPhone bằng Cordova. –

-1

Bạn phải chạy "chuẩn bị cordova" để thay đổi tệp config.xml và nó sẽ tự động tạo ra cordova_plugins.js sẽ được sử dụng cho plugin vị trí địa lý.

Chỉ cần cẩn thận vì khi bạn chạy cordova chuẩn bị nó sẽ xóa tất cả thư mục/www của bạn.

tipically bạn sẽ phải thêm tất cả các plugins và thiết lập môi trường của bạn trước khi bạn thêm mã của bạn vào thư mục/www ...

0

Đừng gọi getCurrentPosition ngay sau khi deviceready đã bị sa thải. Plugin định vị địa lý chưa sẵn sàng, vì vậy navigator.geolocation.getCurrentPosition thực sự gọi HTML5 api, khi đó bạn sẽ thấy hộp thoại HTML. Tôi làm bên dưới để đảm bảo rằng plugin định vị địa lý đã sẵn sàng trước khi gọi navigator.geolocation.getCurrentPosition trong dự án ionic của tôi.

var my_getposition = function() { 
     if (ionic.Platform.isIOS() && !window.Coordinates) { 
      $timeout(function(){ my_getposition(); }, 500); 
      return; 
     } 
     navigator.geolocation.getCurrentPosition(...); 
    }