Я разрабатываю веб-сайт, который полагается на получение по запросу данных геолокации мобильного пользователя. Я делаю его типичный путь через:
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);
}
Это всегда перестало работать с [возражают PositionError] в к функции errorOnLocate, даже если я переключаю порядок метода геолокации.
Это находится на HTC Hero с андроидом 2.1 с помощью любого браузера, встроен. Мой gps работает, и я дал браузеру команду позволять веб-сайтам просматривать мое местоположение. Функция "местоположения" на Google отображает исходное приложение, которое появляется, по телефону берет мое местоположение очень хорошо
Далее больше, если я посещу свой сайт с помощью FireFox 3.5 на моем персональном компьютере, то он найдет мое местоположение правильно. (Я полагаю, что это использует комбинацию IP и точек данных AP). Так или иначе это использует тот же JavaScript.
Править: Это - html/js в браузере, не исходное приложение. Также точное сообщение об ошибке является 'Последним поставщиком местоположения, был отключен'
Доступ к этому осуществляется из WebView
или из приложения Android Browser? Если из 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>