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アプリに使用しています。このコードはデスクトップでは正常に機能しますが、Lollipopを搭載したNexus 4では機能しません。コントローラコードも実行しています。 Cordovaからの要件に従ってdevicereadyの後
私が試してみました
しかし、緯度と経度を取得できず、ジオロケーションは常にタイムアウトになります。
設定から位置/ GPSを有効にした場合にのみ機能します。有効にすると、コードは期待どおりに機能します。
navigator.geolocation.getCurrentPositionは、オプション「enableHighAccuracy」が「true」(デフォルト)に設定されている場合の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」に設定できます。
私は同じ問題を抱えていました、そしてこれは私のためにそれを修正しました
{enableHighAccuracy:false,maximumAge:Infinity, timeout:60000}
これを試すことができます。
{enableHighAccuracy:true, Infinity:Infinity, timeout:2000}