2013-04-26 76 views
0

我正在爲鈦和iOS創建一個應用,該信息只要服務器運行,就會每隔5秒向服務器發送一次新的地理位置信息。但是,在iOS上,應用會在隨機時間間隔後停止發送這些位置。雖然我自己並不完全相信這是由於應用程序在iOS中暫停的事實(因爲它隨機停止並且沒有固定時間),我仍然渴望嘗試並確定。在後臺服務中發送地理位置信息[Titanium]

但是;我真的沒有足夠的這樣做。我在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秒或每分鐘可發送一些櫃檯(如果沒有新位置,因爲最後一個被發現)

TL;博士:我想geolocations以每5秒,但不知怎麼的iOS(iPhone 4S和5測試)停止隨機TIMEPERIOD後發送,並重新啓動發送的那一刻,我得到發送手機出於待機狀態。

回答