web-dev-qa-db-ja.com

navigator.geolocation.getCurrentPositionが常にタイムアウトになるAndroid GPS /位置情報がオフになるまで

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の後

私が試してみました

  • HighAccuracyをfalseに設定する
  • Wifiからデフォルトの場所を使用するように位置情報プラグインを削除する
  • デバイスの再起動
  • ブラウザのキャッシュをクリアする
  • 機内モードのオン/オフ
  • Wi-Fiオン/オフ
  • モバイルデータのオン/オフ

しかし、緯度と経度を取得できず、ジオロケーションは常にタイムアウトになります。

設定から位置/ GPSを有効にした場合にのみ機能します。有効にすると、コードは期待どおりに機能します。

15
Nat Geo

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」に設定できます。

8
Jack He

私は同じ問題を抱えていました、そしてこれは私のためにそれを修正しました

  {enableHighAccuracy:false,maximumAge:Infinity, timeout:60000}
6
rodling

これを試すことができます。

{enableHighAccuracy:true, Infinity:Infinity, timeout:2000}
0
Yasin Ugurlu