Stworzyłem aplikację w PhoneGap, która śledzi twoją podróżowaną trasę przez interfejs API geolokalizacji, otrzymuję aktualną pozycję urządzenia przez navigator.geolocation.getCurrentPosition(onSuccess, onError);
i aktualizowanie polilinii przez uzyskanie położenia po regularnych odstępach czasu przez navigator.geolocation.watchPosition(function(position)
Ale teraz problem polega na tym, że nie działa on w tle tj. (gdy otwieram kolejną aplikację i zaczyna działać w tle) nie aktualizuje średniej polilinii nie wyzwalającej tej funkcji navigator.geolocation.watchPosition(function(position)
więc próbowałem uruchomić aplikację przez Cordova-plugin-background-mode
tę wtyczkę jej uruchomienie aplikacji w tle i ponownie, która nie wyzwala funkcji navigator.geolocation.watchPosition(function(position)
oznacza, że nie było to wymagane .e (nie było potrzeby instalowania wtyczki, aby uruchomić aplikację w tle). Proszę pomóż mi rozwiązać ten problem z uzyskaniem pozycji w tle. A jeśli użyję tej wtyczki Cordova-plugin-mauron85-background-geolocation
, jak mogę uzyskać pozycję, gdy przechodzę przez pozycję oglądania? i co zrobić, jeśli aplikacja działa na pierwszym planie? czy muszę używać funkcji watchPosition
lub czegoś innego?Aby uzyskać lokalizację urządzenia po określonych odstępach czasu, gdy aplikacja Phonegap działa w tle za pomocą interfejsu API geolokalizacji
Odpowiedz
Możesz chcieć przekopać się do tego location plugin. Wydają się sądzić, że rozwiązali problem.
Szybka fiddle i test na telefonach Mam dostęp, aby pokazać, że to nie jest problem z kartami. To jest problem z systemem operacyjnym. Większość telefonów została zoptymalizowana pod kątem wstrzymania aktywności w tle, zwłaszcza w przeglądarce internetowej. Najlepiej jest powiązać z natywnymi wydarzeniami, aby uzyskać pożądane zachowanie.
navigator.geolocation.watchPosition(positionChanged, err, options);
Zauważyłem, że telefony zachowują wszystkie połączenia otwarte nawet dla zadań wykonywanych w tle. Możesz być w stanie zagrać w sytuację, wykonując wywołanie ajax na serwerze, który nie odmawia, ale nie odpowiada, dodaje handler przekroczenia limitu czasu i ustawia interwał, który chcesz, w ajax timeout handler sprawdzić lokalizację, a następnie skonfigurować nowe połączenie.
Powodzenia!
Jest próbka z cordova-plugin-background-mode
:
var backgroundGeoLocation = window.plugins.backgroundGeoLocation;
function startGetLocation() {
var callbackFn = function(location) {
console.log('[js] BackgroundGeoLocation callback: ' + location.latitude + ',' + location.longitude);
var latitude = location.latitude;
var longitude = location.longitude;
var pontos = [];
if($localStorage.getPontosGps() && $localStorage.getPontosGps().pontos){
pontos = $localStorage.getPontosGps().pontos;
}
$log.log('lat: ' + latitude);
$log.log('long: ' + longitude);
if (!_.find(pontos, {
latitude: latitude,
longitude: longitude
})) {
pontos.push({
latitude: latitude,
longitude: longitude,
velocidade: null
});
$localStorage.setPontosGps({
isRunning: true,
pontos: pontos
});
}
backgroundGeoLocation.finish();
};
var failureFn = function(error) {
console.log('BackgroundGeoLocation error: ' + error);
};
backgroundGeoLocation.configure(callbackFn, failureFn, {
desiredAccuracy: 10,
stationaryRadius: 20,
distanceFilter: 30,
debug: false,
stopOnTerminate: false,
locationTimeout: 10,
notificationTitle: 'Title', // <-- android only, customize the title of the notification
notificationText: 'Collecting geolocation'
});
backgroundGeoLocation.start();
}
@everyone daj nam znać, jeśli spróbować Ajax siekać wykonywać w odstępach czasu, gdy w tle. –