10

私は、モバイルユーザーのジオロケーションデータの取得に依存するWebサイトを開発しています。私はそれを次のような典型的な方法で行っています:

function initialize() {
   if(window.google && google.gears) {
        var geo = google.gears.factory.create('beta.geolocation');
        geo.getCurrentPosition(useLocation, errorOnLocate);
   }
   else if(navigator.geolocation) {
       navigator.geolocation.getCurrentPosition(useLocation, errorOnLocate);
   }
   else {
       alert("no geo found");
   }
}

function errorOnLocate(message)
{
    alert(message);
    zoomTo(-34.397, 150.644);
}

これは、ジオロケーションメソッドの順序を切り替えても、errorOnLocate関数の[objectPositionError]で常に失敗します。

これは、Android 2.1を搭載したHTCHeroで、組み込みのブラウザを使用しています。GPSがオンになっていて、ウェブサイトで現在地を表示できるようにブラウザに指示しました。電話に付属しているグーグルマップネイティブアプリケーションの「場所」機能は私の場所をうまく拾います

さらに、パーソナルコンピュータでFireFox 3.5を使用して自分のサイトにアクセスすると、現在地が正しく検出されます(ipデータポイントとapデータポイントの組み合わせを使用していると思います)。いずれにせよ、同じjavascriptを使用します。

編集:これはブラウザのhtml / jsであり、ネイティブアプリではありません。また、正確なエラーメッセージは「最後のロケーションプロバイダーが無効になりました」です。

4

4 に答える 4

12

WebViewこれは、またはAndroidブラウザアプリからアクセスされていますか?からの場合WebView、Java呼び出しを介してジオロケーションを有効にする必要がある場合があります。これについては、WebViewリファレンスを参照してください。

それ以外の場合、JSの何が問題になっているのか正確にはわかりませんが、Androidブラウザで動作することがわかっているHTML+JSは次のとおりです。

<!DOCTYPE html> 
<html> 
<head> 
  <script type="text/javascript"> 
function watchLocation(successCallback, errorCallback) {
  successCallback = successCallback || function(){};
  errorCallback = errorCallback || function(){};

  // Try HTML5-spec geolocation.
  var geolocation = navigator.geolocation;

  if (geolocation) {
    // We have a real geolocation service.
    try {
      function handleSuccess(position) {
        successCallback(position.coords);
      }

      geolocation.watchPosition(handleSuccess, errorCallback, {
        enableHighAccuracy: true,
        maximumAge: 5000 // 5 sec.
      });
    } catch (err) {
      errorCallback();
    }
  } else {
    errorCallback();
  }
}

function init() {
  watchLocation(function(coords) {
    document.getElementById('test').innerHTML = 'coords: ' + coords.latitude + ',' + coords.longitude;
  }, function() {
    document.getElementById('test').innerHTML = 'error';
  });
}
  </script> 
</head> 

<body onload="init()"> 
  <div id="test">Loading...</div> 
</body> 
</html>
于 2010-07-30T01:21:16.447 に答える
1

これは私のAndroid2.4では機能しませんでした。この問題は、GPS以外にワイヤレスネットワークロケーションを有効にすることで解決しました(GPSだけでは機能しませんでした)

[設定]->[場所とプライバシー]->[ワイヤレスネットワークを有効にする]。

于 2013-06-06T06:51:00.833 に答える
0

次の2台の電話でhtml5ジオロケーション機能をテストしました。

  • HTC Wildfire
  • HTCギャラクシー

どちらもAndroid2.1update1 OSを実行しており、組み込みのGoogleブラウザと次のようなデモサイトを使用してジオロケーションを実行できませんでした。

ただし、以下で正常に実行される独自のアプリを開発しました(上記のコードの組み合わせを使用)。

  • HTC Wildfire
  • Android2.1update1エミュレーター
  • HTCギャラクシーはまだテストしていません

私が使用しているコードは次のとおりです。

  1. Javascript lib:

    function is_browser_gps_capable() {
        var _locator_object;
        try {
            _locator_object = navigator.geolocation;
        } catch (e) { return false; }
        if (_locator_object)
            return true;
        else
            return false;
    }

    function watchLocation(successCallback, errorCallback) { successCallback = successCallback || function(){}; errorCallback = errorCallback || function(){};

    // Try HTML5-spec geolocation.
    var geolocation = navigator.geolocation;
    
    if (geolocation) {
        // We have a real geolocation service.
        try {
          function handleSuccess(position) {
            successCallback(position.coords);
          }
    
          geolocation.watchPosition(handleSuccess, errorCallback, {
            enableHighAccuracy: true,
            maximumAge: 5000 // 5 sec.
          });
        } catch (err) {
          errorCallback();
        }
      } else {
        errorCallback();
      }
    

    }

  2. 私のhtmlファイルの実際のコード:

    if (is_browser_gps_capable()) {
        $('geo_location').innerHTML = 'Locating device...';
        watchLocation(function(coords) {
              var latlng = new google.maps.LatLng(coords.latitude, coords.longitude);
              var myOptions = {
                zoom: 16,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
              };
              var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
              var marker = new google.maps.Marker({
                  position: latlng, 
                  map: map,
              });
    $('geo_location').innerHTML = coords.latitude + ',' + coords.longitude; }, function() { $('geo_location').innerHTML = 'Not supported'; }); } else { $('geo_location').innerHTML = 'Not supported'; }

申し訳ありませんが、このソースコードは正しくフォーマットされたくないので、私にメッセージを送ってください。必要に応じてコードを直接送信します。

于 2010-09-21T12:05:19.143 に答える
0

私はこの問題を抱えていました、そしてそれはデバイスの電力が低かったためだと思います。充電すると問題は解決しました。

于 2013-09-11T23:19:51.507 に答える