0

Я создаю приложение для 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 и перезапускать отправка в тот момент, я получаю телефон из режима ожидания.

ответ

1

Фактическое фоновое обслуживание имеет ограничение на остановку через 10 минут, поэтому, если вы хотите поймать местоположение, когда устройство находится в фоновом режиме, вам нужно установить тег режима в файле tiapp.xml.

просто отправьте этот онлайн-документ, как это работает. http://docs.appcelerator.com/titanium/3.0/#!/guide/tiapp.xml_and_timodule.xml_Reference-section-29004921_tiapp.xmlandtimodule.xmlReference-LegacyiPhonesection

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