Я использую cordova, плагин геолокации для отображения широты и долготы на андроиде. Есть много вопросов, подобных этому, поэтому я прочитал и попробовал их решение, но не смог исправить эту проблему. Код ниже отлично работает в браузере.Плагин геолокации Кордовы не работает на android
Я пробовал 3 метода, сначала: «navigator.geolocation.watchPosition», который возвращает неверный результат (37.42, -122.08) в эмуляторе (Android Studio) и ничего не возвращает в устройство.
Я также пробовал «navigator.geolocation.getCurrentPosition» с «enableHighAccuracy», установленным «true» и «false», и я получаю предупреждение об ошибке TimeOut.
Когда я удаляю deviceready, я не получаю timeOut, просто неправильный результат из всех трех методов.
(function (window) {
document.addEventListener("deviceready", onDeviceReady, false);
function onDeviceReady() {
var minAccuracyInMetres = 50;
var positionWatcher;
positionWatcher = navigator.geolocation.watchPosition(
geolocationSuccess2,
geolocationError2,
{ maximumAge: 0, timeout: 100000, enableHighAccuracy: true });
function geolocationSuccess2(position) {
// Reject if accuracy is not sufficient
if (position.coords.accuracy > minAccuracyInMetres) {
return;
}
// Only single position required so clear watcher
navigator.geolocation.clearWatch(positionWatcher);
alert('Latitude: ' + position.coords.latitude + '\n' +
'Longitude: ' + position.coords.longitude + '\n' +
'Altitude: ' + position.coords.altitude + '\n' +
'Accuracy: ' + position.coords.accuracy + '\n' +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
'Heading: ' + position.coords.heading + '\n' +
'Speed: ' + position.coords.speed + '\n' +
'Timestamp: ' + position.timestamp + '\n');
};
function geolocationError2(error) {
console.warn("Error while retrieving current position. " +
"Error code: " + error.code + ",Message: " + error.message);
}
//2
var onSuccess1 = function (position) {
alert('Latitude: ' + position.coords.latitude + '\n' +
'Longitude: ' + position.coords.longitude + '\n' +
'Altitude: ' + position.coords.altitude + '\n' +
'Accuracy: ' + position.coords.accuracy + '\n' +
'Altitude Accuracy: ' + position.coords.altitudeAccuracy + '\n' +
'Heading: ' + position.coords.heading + '\n' +
'Speed: ' + position.coords.speed + '\n' +
'Timestamp: ' + position.timestamp + '\n');
};
function onError1(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n' + 'highaccuracy: true');
}
var options1 = { maximumAge: 0, timeout: 300000, enableHighAccuracy: true };
navigator.geolocation.getCurrentPosition(onSuccess1, onError1, options1);
//3
var onSuccess = function (position) {
alert('Latitude: ' + position.coords.latitude + '\n' +
'Longitude: ' + position.coords.longitude + '\n')
};
function onError(error) {
alert('code: ' + error.code + '\n' +
'message: ' + error.message + '\n' + ' high accuracy:false');
}
navigator.geolocation.getCurrentPosition(onSuccess, onError, { enableHighAccuracy: false, timeout: 300 * 1000, maximumAge: 0 });
}
})(window);
Я получаю watchPosition часть от другого вопроса в StackOverflow. Я использую версию cordova: 6.4.0. Я удалил плагин и попытался снова, но он не сработал. Устройство, с которым я тестирую, - это планшет lenovo. Большое спасибо.
ОБНОВЛЕНИЕ: моя версия геолокации: 2.4.0 Важна ли это ???
надежно, что вы включили GPS –
Да, GPS и Wi-Fi включены. – Niloofar
, на каком телефоне вы пытаетесь запустить приложение? –