web-dev-qa-db-ja.com

navigator.geolocation.getCurrentPositionはAndroid google chromeでは動作しません

このコード:

navigator.geolocation.getCurrentPosition(
                    function(position) {
                        alert(position.coords.latitude, position.coords.longitude);
                    },
                    function(error){
                        alert(error.message);
                    }, {
                        enableHighAccuracy: true
                        ,timeout : 5000
                    }
            );

https://jsfiddle.net/FcRpM/ Googleで動作しますChrome=私のラップトップで動作しますが、モバイルHTC one S(Android 4.1、GPSオフ、モバイル経由の位置情報)ネットワークおよびwifi対応)、WiFi経由でインターネットに接続されています。

  1. デフォルトのブラウザは正常に動作します。
  2. Google Chrome、Opera、Yandex.browser for Androidは「タイムアウト期限切れ」で失敗します。

その他Androidアプリは私を正しく見つけます。

32
Andrey Koltsov

これを試すことができます。私のデバイスで動作するようです(Samsung Galaxy Nexus実行中Chrome 27.0.1453.90 Wi-Fi(データ接続なし、GPSなし)))

_navigator.geolocation.getCurrentPosition(
    function(position) {
         alert("Lat: " + position.coords.latitude + "\nLon: " + position.coords.longitude);
    },
    function(error){
         alert(error.message);
    }, {
         enableHighAccuracy: true
              ,timeout : 5000
    }
);
_

問題は、アラートは(元の形式で)文字列のみを受け取るが、2つのdoubleを渡すことです。たとえば、アラートボックスをalert('Hey', 'Hello');に変更すると、出力はHeyのみになります。 _,_を_+_に変更すると、連結文字列HeyHelloが得られます。方程式が最初に実行されてから表示されるため、alert内で_+_記号を使用することはできません。

これが明確になることを願っています。

17
Adrian

THERE IS A回避策:watchPosition呼び出しに、そしてwatchIDをクリアする前に5秒間待機してこれをラップします。以下のコード。

var options = { enableHighAccuracy: true, maximumAge: 100, timeout: 60000 };
if( navigator.geolocation) {
   var watchID = navigator.geolocation.watchPosition( gotPos, gotErr, options );
   var timeout = setTimeout( function() { navigator.geolocation.clearWatch( watchID ); }, 5000 );
} else {
   gotErr();
}

現時点では「オプション」の値やタイムアウト遅延をいじっていませんが、上記のコードは、試したすべてのプラットフォームで正確な位置情報を返します。

8
delkant

多数のモバイルデバイスとJavascript Geolocationのテストを終了しました。問題が自分のコードにないことを確認するために、Googleのサンプルコードを使用しました。

Chrome for Android 4.4はGPSのみの位置情報サービスでは動作しないようです。また、2.3ストックブラウザでも動作しません。両方とも「高精度」-ワイヤレスおよび3G/4Gネットワ​​ークの使用が必要です。

面白いことに、Firefox for Androidは問題なくGPSのみで動作します。ストックAndroidブラウザ(Chrome + Mobile Safari)のみが失敗しますGPSのみの位置設定で

ギャングの残りの部分-Lumia WP8とGPS、WindowsとLinux(両方ともADSL)は、あらゆる場所の設定で完全に機能しました。

6
karvonen

さて、昨日この問題に遭遇しました。問題は、Geolocation APIがHTTPSでのみ使用できることでした。 http://localhostただし、他のデバイスの場合は、安全な接続が必要です。

それが役に立てば幸い!

2
Ajay Gupta

Error3の解決策を何時間も探し求めた後、私は自分の電話を再起動することしかできず、ジオロケーションは通常どおりに動作を開始します。残念...

2
saike

すべてのシミュレータで機能していましたが、Androidデバイスでは機能していませんでした

私のために働いたのは

navigator.geolocation.getCurrentPosition(
                (position) => {
                    console.log(position);
                },
                (error) => console.log(new Date(), error),
                { enableHighAccuracy: false, timeout: 5000},
            );

3つの引数の代わりに2つの手段のみを使用したことを意味します

{enableHighAccuracy:false、タイムアウト:5000}

1
Sultan Ali