2012-05-01 2 views
4

Я пытаюсь использовать Geolocation с API HTML5 на устройствах Android. Я провел тесты с Galaxy S LC (эквивалент Galaxy S1). Версия Android 2.2.1.Использование HTML5 Geolocation API с Android 2.0+ Browser

Я прочитал много тем, но я до сих пор не нашел решения.

Я использую этот типичный код для 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> 

Он хорошо работает на компьютере с Chrome и Opera (но не с Firefox). Он также работает с Opera на мобильном устройстве. Но он не работает с браузером Android. Его версия 2.2.1. Это то, что происходит на этом: 1. Появляются следующие сообщения: «Пытается найти вас» «Геолокация поддерживается» 2. По истечении времени, указанного таймаутом (здесь 10 секунд) отображается пустая страница. Функции sucessCallback или errorCallback не вызываются.

Когда я не указываю таймаут (timeout = бесконечность), он работает, если включен GPS. Если это не так, я также получаю пустую страницу без сообщений об ошибках.

Я пробовал этот тест HTML5 Geolocation в Android-браузере: http://html5demos.com/geo, и он также не работает.

Я пробовал this code (1-й ответ). Это работает иногда, но мы должны подождать 2 минуты, чтобы получить позицию (как сказано в комментариях).

Я также попытался получить его через Webview с all the specifications needed, но он делает то же самое.

Here Говорят, что для устранения этой ошибки в браузере Android нам просто нужно указать enableHighAccuracy на true, но если GPS не активирован, все еще не будет вызвана функция (sucessCallback или errorCallback).

Если у кого-то есть решение, это будет большой помощью для меня.

Благодарим за помощь.


Фактически пустая страница была вызвана функцией «document.write». Я заменил его на innerHTML, и теперь он работает. Это означает, что отображаются ошибки, вызывается errorCallback.

Теперь проблема заключается в том, что браузер Android может определять положение только с помощью GPS (HighAccuracy). Если GPS не включен или если он не может выбрать позицию (например, внутри здания), он не вернет позицию. Напротив, браузер Opera использует сеть ретрансляции (метод Cell-ID) для определения позиции (в этом случае точность составляет менее 150 м).

Знаете ли вы, как заставить браузер Android использовать источник сотовой ячейки?

+0

Проверьте это сообщение и его решения. http://stackoverflow.com/questions/11280946/unable-to-get-gps-coordinates-using-javascript-on-browser-in-android/11298468#11298468 – axs

ответ

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> 
0

Google изменил поведение служб определения местоположения в Chrome в январе этого года. Одно из изменений заключалось в том, что Chrome не возвращает текущие координаты местоположения, если HTTP-соединение не зашифровано.У нас была аналогичная проблема несколько месяцев назад, когда службы определения местоположения в нашем веб-приложении отлично работали на всех клиентах на всех устройствах (ПК, телефоны, планшеты и т. Д.), За исключением браузера Chrome. Установка SSL-сертификата в этом приложении устраняет все проблемы с географическим местоположением. Надеюсь это поможет.

Смежные вопросы