2014-11-26 15 views
10
app.controller('dashboard', function($scope){ 
    $scope.getPosition = function(position){ 
     $scope.acc = position.coords; 
     $scope.lat = position.coords.latitude; 
     $scope.lng = position.coords.longitude; 
     $scope.$apply(); 
    }; 
    $scope.getPositionErr = function(error){ 
     alert('code: ' + error.code + '\n' + 
        'message: ' + error.message + '\n'); 
    }; 
    navigator.geolocation.getCurrentPosition($scope.getPosition, $scope.getPositionErr, {maximumAge: 0, timeout: 6000, enableHighAccuracy:false}); 
}); 

Tôi đang sử dụng Angular JS và Cordova cho ứng dụng Android. Mã này hoạt động tốt trên máy tính để bàn nhưng không hoạt động trên Nexus 4 với Lollipop. mã cũng điều khiển được thực hiện sau khi deviceready theo yêu cầu từ Cordovanavigator.geolocation.getCurrentPosition luôn nhận thời gian chờ trong Android cho đến khi GPS/Vị trí đang TẮT

Tôi đã thử

  • Thiết HighAccuracy false
  • Loại bỏ Plugin geolocation để nó sử dụng vị trí mặc định từ Wifi
  • Device reboot
  • Xóa bộ nhớ cache của trình duyệt
  • Bật/tắt chế độ trên máy bay
  • Wifi on/off
  • Dữ liệu di động on/off

Nhưng tôi không thể nhận được lat, dài và định vị luôn được thời gian chờ.

Tính năng này chỉ hoạt động khi tôi bật Vị trí/GPS từ cài đặt. Sau khi cho phép mã hoạt động như mong đợi.

+0

sáu giây có thể không đủ dài cho thời gian ra. Hầu hết các ứng dụng largescale chạy ít nhất 30 giây cho thời gian chờ vị trí. Bạn đã thử thời gian chờ lâu hơn chưa? –

+0

Có, tôi đã thử với 1 phút và không có thời gian. –

+0

Bây giờ đây là một cái gì đó tương tự. Mở [Geo Location Exmaple] (http://www.w3schools.com/html/tryit.asp?filename=tryhtml5_geolocation_error) trong trình duyệt Chrome trong Android. Ví dụ định vị đơn giản từ w3schools. Bạn sẽ không thể nhận được lat, cho đến khi bạn không bật Vị trí/GPS của mình. –

Trả lời

3

navigator.geolocation.getCurrentPosition chỉ dành cho GPS khi tùy chọn "enableHighAccuracy" được đặt là 'true' (mặc định). Đó là lý do tại sao bạn không thể nhận vị trí hiện tại qua thiết bị di động. Giới thiệu về "nó đang hoạt động trên máy tính để bàn", tôi tin rằng bạn phải mở cài đặt GPS trong trình duyệt của mình.

Thông thường tôi đã sử dụng mã bên dưới để nhận vị trí bất kể GPS có đang mở hay không.

var positionOption = { timeout: 500, enableHighAccuracy: true }; 
var gpsSunccuss = function(currentPosition) { 
    //use gps position 
}; 
var gpsFailed = function() { 
    //use some 3rd party position solution(get position by your device ip) 
    getPositionBy3rdParty(); 
}; 
navigator.geolocation.getCurrentPosition(gpsSunccuss, gpsFailed, positionOption); 

Mặt khác, bạn có thể đặt enableHighAccuracy là 'false'.

+1

GPS không cần thiết để định vị địa lý hoạt động. Nó có thể được chạy trong trình duyệt máy tính để bàn mà không cần mở bất kỳ cài đặt GPS nào. –

+0

@NatGeo Bạn có thể thử trên thiết bị di động không? –

+0

Tôi đã thử trên thiết bị di động có mã mẫu ở trên và hoạt động trên máy tính để bàn của Chrome chứ không phải trên ứng dụng điện thoại. Và tất cả những điều tôi đã đề cập trong câu hỏi. –

2

Tôi có vấn đề giống hệt nhau và điều này cố định nó cho tôi

{enableHighAccuracy:false,maximumAge:Infinity, timeout:60000} 
Các vấn đề liên quan