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});
});
我正在使用Angular JS和Cordova作为Android应用。 此代码在桌面上运行正常,但在Nexus 4和Lollipop上运行不正常。 根据Cordova
的要求,控制器代码也在设备准备完成后执行我试过了
但是我无法获得lat,长期和地理定位总是会超时。
仅当我从设置启用位置/ GPS时才有效。启用后,代码按预期工作。
答案 0 :(得分:8)
navigator.geolocation.getCurrentPosition 仅适用于GPS。这就是为什么您无法通过移动设备获取当前位置的原因。关于“它正在桌面上工作”,我相信您必须在浏览器中打开GPS设置。
通常我使用下面的代码来获取位置,无论GPS是否打开。
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);
另一方面,您可以将enableHighAccuracy设置为'false'。
答案 1 :(得分:5)
我有同样的问题,这为我解决了
{enableHighAccuracy:false,maximumAge:Infinity, timeout:60000}
答案 2 :(得分:0)
您可以尝试一下。
{enableHighAccuracy:true, Infinity:Infinity, timeout:2000}