Геолокация JavaScript на Android не работает - PullRequest
9 голосов
/ 30 июля 2010

Я занимаюсь разработкой веб-сайта, который опирается на данные геолокации мобильного пользователя.Я делаю это типичным способом через:

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);
}

Это всегда приводит к сбою [object PositionError] в функции errorOnLocate, даже если я переключаю порядок методов геолокации.

Это на HTC Hero с android 2.1, использующим любой встроенный браузер. Мой gps включен, и я дал указание браузеру разрешить веб-сайтам просматривать мое местоположение.Функция «местоположение» в родном приложении карты Google, которое приходит на телефон, точно определяет мое местоположение

Более того, если я захожу на мой сайт с помощью FireFox 3.5 на моем персональном компьютере, он будет правильно определять мое местоположение (Я считаю, что он использует комбинацию точек данных ip и ap).В любом случае, он использует тот же JavaScript.

РЕДАКТИРОВАТЬ: это HTML / JS в браузере, а не нативное приложение.Также точное сообщение об ошибке: «Последний поставщик местоположения был отключен»

Ответы [ 4 ]

12 голосов
/ 30 июля 2010

Доступ к нему осуществляется из WebView или из приложения браузера Android?Если из WebView, вам может потребоваться включить геолокацию через вызов Java.См. Ссылку WebView .

В противном случае, я не уверен точно, что не так с вашим JS, но вот HTML + JS, который я знаю, работает с браузером Android:

<!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>
1 голос
/ 06 июня 2013

Это не работало на моем Android 2.4, проблема была решена путем включения беспроводных сетей, кроме GPS (не работал только с GPS)

Настройки -> Местоположение и конфиденциальность -> Включить беспроводные сети.

0 голосов
/ 12 сентября 2013

У меня была эта проблема, и я думаю, что это потому, что питание на устройстве было низким. Зарядил его, и проблема ушла.

0 голосов
/ 21 сентября 2010

Я проверил функцию геолокации html5 на следующих двух телефонах:

  • HTC Wildfire
  • HTC Galaxy

Оба работали с обновлением Android 2.11ОС и то и другое не смогли выполнить геолокацию с помощью встроенного браузера Google и демонстрационных сайтов, таких как:

Однако,Я разработал свое собственное приложение (используя комбинацию кода, уже представленного выше), которое успешно работает на:

  • HTC Wildfire
  • Android 2.1 update1 эмулятор
  • естьу вас еще не было HTC Galaxy для тестирования

и код, который я использую:

  1. Javascript lib: <pre> 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; }</p> <p>function watchLocation(successCallback, errorCallback) { successCallback = successCallback || function(){}; errorCallback = errorCallback || function(){}; </p> <pre><code>// 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, });<br> $('geo_location').innerHTML = coords.latitude + ',' + coords.longitude; }, function() { $('geo_location').innerHTML = 'Not supported'; }); } else { $('geo_location').innerHTML = 'Not supported'; }

Извините, этот исходный код просто не хочет правильно форматировать, напишите мне, и я пришлю вам код, если вы этого хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...