4

Android デバイスの HTML5 API で Geolocation を使用しようとしています。Galaxy S LC (Galaxy S1 相当) でテストを行いました。Android のバージョンは 2.2.1 です。

それについて多くのトピックを読みましたが、まだ解決策が見つかりませんでした。

私は Geolocating のためにこの典型的なコードを使用します:

`

<script type="text/javascript">

document.write("Trying to locate you");

if(navigator.geolocation){
    document.write("Geolocation is supported");

    navigator.geolocation.getCurrentPosition(successCallback, errorCallback,
  {
    enableHighAccuracy : true,
    timeout : 10000, // 10s
    maximumAge : 0
  }
);


function successCallback(position){
    document.write("You have been located. Latitude :" + position.coords.latitude +", longitude : " + position.coords.longitude);       
};


function errorCallback(error){
    document.write("It didn't work");
    switch(error.code){
    case error.PERMISSION_DENIED:
        document.write("Permission denied");
        break;
    case error.POSITION_UNAVAILABLE:
        document.write("Position unavailable");
        break;
    case error.TIMEOUT:
        document.write("Timeout");
        break;
    case error.UNKNOW_ERROR:
        document.write("Unknown error");
        break;              
    }
}

}
else{
    document.write("La géolocalisation n'est pas supportée par le navigateur"); 
}

</script>

PC では Chrome と Opera でうまく動作します (ただし、Firefox では動作しません)。また、モバイル デバイスの Opera でも動作します。ただし、Android ブラウザでは動作しません。そのバージョンは 2.2.1 です。1. 次のメッセージが表示されます。関数 sucessCallback または errorCallback は呼び出されません。

タイムアウトを指定しない場合 (タイムアウト = 無限)、GPS が有効になっていると機能します。そうでない場合は、エラー メッセージのない空白のページも表示されます。

Android ブラウザーでこの HTML5 Geolocation テストを試しました: http://html5demos.com/geoも機能しません。

このコードを試しました(最初の回答)。時々機能しますが、位置を取得するのに 2 分待たなければなりません (コメントで述べたように)。

また、必要なすべての仕様を備えた Webview を介して取得しようとしましたが、まったく同じです。

Android ブラウザでこのバグを解決するには、 enableHighAccuracyを true に指定するだけでよいと言われていますが、GPS が有効になっていない場合は、関数 (sucessCallback または errorCallback) は呼び出されません。

誰かが解決策を持っていれば、それは私にとって大きな助けになります。

ご協力ありがとうございました。


実は空白ページは「document.write」関数が原因でした。これを innerHTML に置き換えたところ、動作するようになりました。つまり、エラーが表示され、errorCallback が呼び出されます。

ここでの問題は、Android ブラウザーが GPS (HighAccuracy) を使用してのみ位置を特定できることです。GPS が有効になっていない場合、または位置を取得できない場合 (建物内など)、位置は返されません。逆に、Opera ブラウザはリレー ネットワーク (Cell-ID 方式) を使用して位置を特定します (その場合、精度は 150m 未満です)。

Android ブラウザにセル ID ソースを強制的に使用させる方法を知っていますか?

4

2 に答える 2

0

このようにしてみてください。それはそれを行う必要があります。

<!DOCTYPE html>
<html>
<body>
<p id="demo">Click the button to get your coordinates:</p>
<button onclick="getLocation()">Try It</button>
<script>
var x=document.getElementById("demo");
function getLocation()
  {
  if (navigator.geolocation)
    {
        navigator.geolocation.getCurrentPosition(showPosition,showError,
          {
            enableHighAccuracy : true,
            timeout : 10000, // 10s
            //maximumAge : 0
          }
        );
    }
  else{x.innerHTML="Geolocation is not supported by this browser.";}
  }
function showPosition(position)
  {
  x.innerHTML="Latitude: " + position.coords.latitude + 
  "<br>Longitude: " + position.coords.longitude;    
  }
function showError(error)
  {
  switch(error.code) 
    {
    case error.PERMISSION_DENIED:
      x.innerHTML="User denied the request for Geolocation."
      break;
    case error.POSITION_UNAVAILABLE:
      x.innerHTML="Location information is unavailable."
      break;
    case error.TIMEOUT:
      x.innerHTML="The request to get user location timed out."
      break;
    case error.UNKNOWN_ERROR:
      x.innerHTML="An unknown error occurred."
      break;
    }
  }
</script>

</body>
</html>
于 2013-08-06T02:56:11.747 に答える
0

Google は、今年 1 月に Chrome の位置情報サービスの動作を変更しました。変更の 1 つは、http 接続が暗号化されていない場合、Chrome が現在の場所の座標を返さないことです。数か月前にも同様の問題があり、Chrome ブラウザーを除くすべてのデバイス (PC、電話、タブレットなど) のすべてのクライアントで、Web アプリの位置情報サービスが正常に機能していました。そのアプリに SSL 証明書をインストールすると、すべての地理的位置の問題が修正されました。お役に立てれば。

于 2016-09-18T16:40:37.790 に答える