Я создаю приложение для Android и iOS с титаном, который отправляет новую Geolocation на сервер каждые 5 секунд до тех пор, пока работает сервер. Однако на iOS приложение перестает отправлять эти адреса после случайного интервала. Хотя я сам не полностью убежден, что это связано с тем, что приложение приостанавливается в iOS (так как оно останавливается случайным образом, а не в фиксированное время), я все еще хочу попробовать и быть уверенным.Отправить Geolocation в фоновом режиме [Titanium]
Однако; У меня нет NO CLUE, чтобы сделать это вообще. Я создал фоновый сервис в eventListener, чтобы узнать, что происходит, и он сразу же начинает вести учет (я сейчас нахожу консольный журнал). Тем не менее, моя геолокация по-прежнему обычно тикает.
Теперь, может кто-нибудь, пожалуйста, дайте мне несколько указателей на то, как пройти через это? Хочу ли я остановить своего обычного слушателя геолокации и позволить службе BG взять на себя ответственность? Или же теперь BGservice сохраняет привязку событий геолокации в моем нормальном коде?
На данный момент я боюсь сказать, что я очень отчаянно нуждаюсь в помощи, ха-ха!
Вот мое обращение геолокации в настоящее время, наряду с BGservice:
//Start button. listens to an eventHandler in location.js
btnStart.addEventListener('click', function (e) {
if(Titanium.Geolocation.locationServicesEnabled === false) {
GPSSaved.text = 'Your device has GPS turned off. Please turn it on.';
} else {
if (Titanium.Network.online) {
GPSSaved.text = "GPS zoeken...";
//Empty interval and text to make a clean (re)start
clearInterval(interval);
//Set a half second timer on the stop button appearing(So people can't double tap the buttons)
stopTimeout = setTimeout(showStopButton, 1000);
//Switch the textlabels and buttons from startview to stopview
stopText.show();
startText.hide();
btnStart.hide();
//Locationhandler
location.start({
action: function (e) {
//Ti.API.info(e.coords.longitude);
if (e.coords) {
//If the newly acquired location is not the same as the last acquired it is allowed
if (e.coords.longitude != lastLon && e.coords.latitude != lastLat) {
//set the last acquired locations+other info to their variables so they can be checked(and used)
lastLat = e.coords.latitude;
lastLon = e.coords.longitude;
lastKnownAltitude = e.coords.altitude;
lastKnownHeading = e.coords.heading;
lastKnownSpeed = e.coords.speed;
if (lastLat != 0 && lastLon != 0) {
setGPSholder(lastLat, lastLon, lastKnownAltitude, lastKnownHeading, lastKnownSpeed);
} else {
GPSSaved.text = 'Geen coordinaten.';
}
}
}
}
});
/*
A second interval which shows a counter to the user and makes sure a location is sent
roughly every 5 seconds(setInterval isn't accurate though)
A lot of counters are tracked for several reasons:
minuteInterval: Counter which makes sure the last location is sent after a minute if no new one is found in the meantime
secondsLastSent: The visual counter showing the user how long its been for the last save(Is reset to 0 after a succesful save)
*/
interval = setInterval(function() {
minuteInterval++;
minuteIntervalTest++;
secondsLastSent++;
counterBlock.text = "De laatste locatie is " + secondsLastSent + " seconden geleden verstuurd";
//If the counter is higher than 5 send a new coordinate. If at the same time the minuteInterval is over a minute
//The last location is put in the array before calling the sendCoordinates
if (counter >= 5) {
if (minuteInterval > 60) {
if (lastLat != 0 && lastLon != 0) {
setGPSholder(lastLat, lastLon, lastKnownAltitude, lastKnownHeading, lastKnownSpeed);
}
}
counter = 0;
sendCoordinates();
Ti.API.info(1);
} else {
counter++;
}
if (minuteIntervalTest > 60) {
sendTestRequest();
}
}, 1000);
if (Titanium.Platform.osname == 'iphone' || Titanium.Platform.osname == 'ipad') {
//var service = Ti.App.iOS.registerBackgroundService({url:'send_geolocation_service.js'});
var service;
// Ti.App.iOS.addEventListener('notification',function(e){
// You can use this event to pick up the info of the noticiation.
// Also to collect the 'userInfo' property data if any was set
// Ti.API.info("local notification received: "+JSON.stringify(e));
// });
// fired when an app resumes from suspension
Ti.App.addEventListener('resume',function(e){
Ti.API.info("app is resuming from the background");
});
Ti.App.addEventListener('resumed',function(e){
Ti.API.info("app has resumed from the background");
// this will unregister the service if the user just opened the app
// is: not via the notification 'OK' button..
if(service!=null){
service.stop();
service.unregister();
}
Titanium.UI.iPhone.appBadge = null;
});
Ti.App.addEventListener('pause',function(e){
Ti.API.info("app was paused from the foreground");
service = Ti.App.iOS.registerBackgroundService({url:'send_geolocation_service.js'});
Ti.API.info("registered background service = "+service);
});
}
} else {
stopGPS();
GPSSaved.text = "Geen internetverbinding.";
}
}
});
Как вы можете видеть, что есть некоторые счетчики, работающие в интервале, чтобы решить, если геолокации следует направлять через каждые 5 секунд или каждую минуту (если нет новое место, так как последний найден)
Т.Л., д-р: Я хочу geolocations быть посланы через каждые 5 секунд, но как-то IOS (iPhone 4S и 5 протестированные) прекратить отправку после случайного TimePeriod и перезапускать отправка в тот момент, я получаю телефон из режима ожидания.