2013-10-02 3 views
0

Я пытаюсь реализовать геолокацию в приложении PhoneGap на Android. По какой-то причине локатор возвращает только точные расстояния, когда подключен WiFi (т. Е. Предпочитает грубый штраф). Мой GPS, конечно, включен. Обратите внимание, что в какой-то момент приложение попыталось использовать GPS (я увидел, что мерцатель локатора появился), но он продолжал тайм-аут; после перезапуска устройства он вернулся только к использованию WiFi. Прикрепленный мой код:PhoneGap геолокатор с использованием WiFi вместо GPS

function testGeo(){ 
     navigator.geolocation.getCurrentPosition(function(position){ 
      $('#latitude').html(''); 
      $('#longitude').html(''); 
      $('#accuracy').html(''); 
      $('#latitude').html(position.coords.latitude); 
      $('#longitude').html(position.coords.longitude); 
      $('#accuracy').html(position.coords.accuracy); 
      $('#loading-frame-geo').hide(); 
     }, GeoError, {enableHighAccuracy:true,maximumAge:3000,timeout:10000}); 
} 

Я использую PhoneGap версии 2.5.0 (для обратной совместимости с другими функциями)

ответ

0

Убедитесь, что у вас есть еще геолокация включена в вашем config.xml: <plugin name="Geolocation" value="org.apache.cordova.GeoBroker"/>

И в вашем AndroidManifest.xml:

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> 
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> 

попробовать также повысит ваш тайм-аут 60000 - это может занять некоторое время для старых устройств, чтобы приобрести GPS фикс.

Рассмотрите возможность использования navigator.geolocation.watchPosition вместо navigator.geolocation.getCurrentPosition. Это добавит наблюдателя, который вызывает функцию успеха каждый раз, когда устройство приобретает новую позицию; обратный вызов ошибки будет вызван, если исправление положения еще не было получено.

Еще одна вещь, которую я нашел на опыте, заключается в том, что Android будет тихо возвращаться к Wi-Fi или триангуляции ячеек, если он потеряет свое GPS-решение, и нет ничего в объекте Position, переданном функции успеха, чтобы сообщить вам, какое оборудование устройство используется для получения своего местоположения. Тем не менее, вы можете вывести его из точности и отбрасывать любые позиции, которые являются слишком неточными, что-то вроде:

MIN_ACCURACY = 20; //metres 

function success(position){ 
    if(position.coords.accuracy > MIN_ACCURACY){ 
    console.log("Position rejected because accuracy is less than required "+MIN_ACCURACY+" metres"); 
    return; 
    } 
    // else, do some stuff with the position 
} 

Вы могли бы также рассмотреть возможность использования this plugin, чтобы проверить, если GPS включен на устройстве с isGpsEnabled() и если не , направить пользователь на страницу настроек с switchToLocationSettings()

Надеется, что это помогает ...

+0

Я на самом деле с помощью PhoneGap построить таким образом, я просто добавил имя функции в config.xml –

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