3

Я знаю, что этот вопрос задан раньше, но я пробовал все предлагаемые решения, и ничего не работает!Телефонная геолокация не работает на Android (устройство Nexus)

Я работаю над мобильным приложением, созданным с помощью Phonegap (+ Angular, но я не думаю, что это важно). В этом приложении я использую плагин геолокации. Более конкретно мой config.xml выглядит следующим образом:

<?xml version="1.0" encoding="UTF-8" ?> 
    <widget xmlns = "http://www.w3.org/ns/widgets" 
     xmlns:gap = "http://phonegap.com/ns/1.0" 
     id   = "......" 
     version  = "1.0.0" > 

    <name>.....</name> 

    <preference name="permissions"    value="none"/> 

    <preference name="orientation"    value="default" /> 
    <preference name="target-device"    value="universal" /> 
    <preference name="phonegap-version"   value="3.6.3" /> 

    <gap:plugin name="org.apache.cordova.geolocation" /> 
    <gap:plugin name="com.phonegap.plugins.PushPlugin" version="2.4.0" /> 
    <gap:plugin name="org.apache.cordova.network-information" /> 
    <gap:plugin name="org.apache.cordova.statusbar" /> 
    <gap:plugin name="org.apache.cordova.device" /> 
    <gap:plugin name="org.transistorsoft.cordova.background-geolocation"/> 
</widget> 

Есть времена, что я хочу, чтобы получить текущее положение пользователя, поэтому я делаю это следующим образом:

navigator.geolocation.getCurrentPosition(function (position) { 
    ..... 
}, function (error) {}, { 
    enableHighAccuracy: true, 
    maximumAge: 30000, 
    timeout: 10000 
}); 

Эти отлично работает на устройствах iOS и даже работает над эмулятором пульсации для Android.

Но когда я пытаюсь запустить приложение на Android и, более конкретно, на Nexus 4 и 5, геолокация не работает. Дело не в том, что это дает мне ошибку, она просто пытается получить позицию без везения.

Однако все другие приложения, использующие геолокацию, а также геолокацию в браузере работают отлично!

Я также хотел бы отметить, что я использую Phonegap Build для создания приложения.

Кто-нибудь знает, как я могу исправить эту проблему? У кого-то была такая же проблема?

+0

является обратным вызов ошибки вызываются? phonepap android использует геолокацию HTML 5, поэтому, если она работает в браузере, она тоже должна работать с приложением – jcesarmobile

+0

Нужно, но это не так. Я также столкнулся с этой же проблемой. Приложение работает исправно в Chrome, но не удается найти место в завернутом приложении на устройствах Nexus. –

ответ

0

Из вашего примера кода, как вы узнаете, что при возникновении пустого обработчика ошибок function (error) {} не возникает ошибки?

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

Вместо этого я хотел бы использовать watchPosition(), чтобы настроить наблюдателя, который будет вызывать функцию успеха каждый раз, когда ОС получает обновление местоположения. Если вам нужна только одна позиция, вы можете очистить наблюдателя, опционально проверяя, чтобы у вас была позиция приемлемой точности.

Например:

var minAccuracyInMetres = 50; 

var positionWatcher; 

function onDeviceReady(){ 
    positionWatcher = navigator.geolocation.watchPosition(
     geolocationSuccess, 
     geolocationError, 
     {maximumAge:0, timeout: 10000, enableHighAccuracy: true}); 
} 

function geolocationSuccess(position){ 
    // Reject if accuracy is not sufficient 
    if(position.coords.accuracy > minAccuracyInMetres){ 
     return;   
    } 

    // Only single position required so clear watcher 
    navigator.geolocation.clearWatch(positionWatcher); 

    // Do something with the user's location... 

} 

function geolocationError(error){ 
    console.warn("Error while retrieving current position. " + 
    "Error code: " + error.code + ",Message: " + error.message); 
} 

document.addEventListener("deviceready", onDeviceReady, false); 
Смежные вопросы