1

我有一個Titanium應用程序,它註冊一個iOS後臺服務,該服務每30秒記錄一次設備的GPS數據。我已經將它註冊爲位置服務,它應該可以防止它在10分鐘後停止,但它不起作用。這裏是我的tiapp.xml的相關部分:iOS位置後臺服務10分鐘後停止

<ios> 
     <plist> 
      <dict> 
       <key>UISupportedInterfaceOrientations~iphone</key> 
       <array> 
        <string>UIInterfaceOrientationPortrait</string> 
        <string>UIInterfaceOrientationPortraitUpsideDown</string> 
        <string>UIInterfaceOrientationLandscapeLeft</string> 
        <string>UIInterfaceOrientationLandscapeRight</string> 
       </array> 
       <key>UISupportedInterfaceOrientations~ipad</key> 
       <array> 
        <string>UIInterfaceOrientationPortrait</string> 
        <string>UIInterfaceOrientationPortraitUpsideDown</string> 
        <string>UIInterfaceOrientationLandscapeLeft</string> 
        <string>UIInterfaceOrientationLandscapeRight</string> 
       </array> 
       <key>UIBackgroundModes</key> 
       <array> 
        <string>location</string> 
       </array> 
       <key>UIRequiredDeviceCapabilities</key> 
       <array> 
        <string>gps</string> 
        <string>location-services</string> 
       </array> 
      </dict> 
     </plist> 
    </ios> 

這是我如何註冊它在alloy.js:

if(utils.ios) { 
    console.log('registering ios background service'); 
    Ti.App.iOS.registerBackgroundService({ url: 'tracking/backgroundService.js' }); 
} 

和背景服務本身:

var timeout = constants.tracking.interval * 1000; 

console.log('starting background gps tracking'); 

setInterval(function() { 
    var user = settings.user(); 
    if(user && user.password) { 
     //user is logged in, let's track them. 
     gpsTracking.track(); 
    } 
    else { 
     console.log('user is not logged in so not tracking'); 
    } 
}, timeout); 

這在iPhone模擬器上進行了測試,我還沒有在實際的iOS設備上進行測試,因爲開發者網站仍然關閉,所以我無法創建配置文件。

我在構建文件夾中檢查了我的info.plist,它正確地爲UIBackgroundModes和UIRequiredDeviceCapabilities添加了鍵/數組值,所以我不確定接下來要檢查什麼。

任何想法?

回答

0

請參閱克里斯比爾先生的回答here。我會爲你描述它。

Here是瞭解應用程序如何與 背景交互的極好資源。只有幾種不同類型的應用程序允許在後臺運行(並執行代碼)以獲得額外的時間。 (我 認爲正常的限制是約10分鐘)。

  • 應用程式播放音頻內容給用戶,同時在後臺運行,如音樂播放器應用程序

  • 應用程序,使用戶瞭解其位置的時刻,例如 作爲導航應用

  • 應用,支持互聯網語音協議 (VoIP)的需要下載和處理新的內容

  • 書報亭應用接收定期更新從外部配件對於某些類型的後臺執行的

支持

  • 應用程序必須事先獲得 聲明使用它們的應用程序。應用程序使用 Info.plist文件聲明對服務的支持。添加UIBackgroundModes關鍵看你的Info.plist 文件,並將其值設置爲包含 下列字符串的一個或多個陣列:

    • 音頻:應用程序播放音頻內容給用戶 而背景。 (此內容包括使用AirPlay的流式音頻或 視頻內容。)

    • 位置:即使它在後臺運行,該應用也會將用戶的位置告知 。

    • voip:該應用程序提供了用戶使用互聯網連接撥打電話的功能。

    • 報刊亭內容:該應用程序是一個報亭應用程序, 下載和處理 背景中的雜誌或報紙內容。

    • 外部附件該應用程序與硬件附件 一起使用,該附件需要通過外部附件框架定期傳遞更新。藍牙中央 - 該應用程序與 藍牙配件一起使用,需要通過CoreBluetooth框架按照正常的 計劃提供更新。

    因此,從build文件夾中取出info.plist文件,並將其放入項目的根目錄。 然後按照上面的描述進行編輯。希望這可以幫助!

  • +1

    他明確表示他更新了tiapp.xml,因此不需要將info.plist放置在項目的根目錄中;事實上,這不是推薦的方法 –

    +0

    @Aaron - 有什麼想法可能是錯的? – Justin

    +0

    @Justin:確保你將info.plist文件放到根目錄下,而不是放入Resources文件夾或者生成文件夾 – Anand

    0

    我面臨同樣的問題,似乎鈦有一個GPS定位的緩存邏輯,並不能得到實際的經度和緯度。也遇到像你這樣的問題,10分鐘停止,如果我初始化系統iOS地圖成功獲取位置,回到鈦應用程序,它再次運作。非常有線。 經過長時間的調查和嘗試。

    最後通過將精度設置爲ACCURACY_NEAREST_TEN_METERS並使用位置事件來解決問題。現在我可以不斷更新GPS,精度也非常好,5米。

    Titanium.Geolocation.setAccuracy(ACCURACY_SET); 
    Ti.Geolocation.addEventListener('location',evtGpsResult); 
    

    希望它可以節省您的問題。