2016-08-16 96 views
0

因爲蘋果文檔是關於this point相當模糊:CoreBluetooth後臺執行10秒?

Upon being woken up, an app has around 10 seconds to complete a task 

這是否意味着,10秒後,應用程序將回到它的「暫停」狀態?從理論上講,在這10秒之後,是否可以「強制」應用程序保持清醒狀態? (私人應用程序)。

在我的情況下,該設備將連接到汽車。

回答

1

這是否意味着10秒後應用程序將返回到其「暫停」狀態的 ?

如果你仔細閱讀:

一旦被喚醒,應用程序有大約10秒的處理 數據。理想情況下,它應該儘可能快地處理數據,並且允許其自身再次被暫停。但是,如果需要更多時間,該應用可以使用beginBackgroundTaskWithExpirationHandler:方法 來請求額外的時間;它應該這樣做只有當絕對 必要時,雖然。

應用程序通常由背景模式(如位置服務,音頻,推送通知等)清醒和像位置服務一些模式中,直到所述位置數據正被捕獲它將保持清醒,對於一些,這不是」不要像推送通知一樣保持清醒。所以這取決於正在執行的任務。對於藍牙,如果它與另一個藍牙設備連接,則它將保持清醒狀態。

從理論上說,是否有可能在這10秒之後「強制」應用程序保持清醒狀態,然後 ? (私人應用程序)。

是的,這是可能的。

上述模式中的每讓系統知道你的應用程序應該 被喚醒,或者在適當的時候推出相關 事件作出響應。例如,在開始播放音樂,然後一個應用程序移到 到後臺仍然需要執行時間,以填補音頻輸出 緩衝區。啓用音頻模式告訴系統框架,他們 應繼續 適當的時間間隔進行必要的回調到應用程序。如果應用程序不選擇此模式,任何音頻 正在播放或應用程序記錄停止時,應用程序移動到 背景。

注意:如果您需要它爲您的私人應用程序,那麼你可以檢查這個here。如果您添加解決方案並申請AppStore,則您的應用將被拒絕。

+0

從我的測試來看,即使請求這樣,iOS也不會讓你運行超過10秒。我會牢記這一點。 – Anton

0

試試這個:

[[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
0

在Xcode,去你的項目 - > Capabilities->背景模式並標記背景模式爲開。馬克還採用了藍牙LE配件:

與藍牙外設工作

enter image description here

應用程序可以要求被喚醒,如果當應用程序被暫停 外設提供了一個更新。這種支持對於定期發送數據的藍牙-LE配件來說非常重要,例如藍牙心率帶,其數據傳輸速率爲 。您啓用 支持使用Xcode項目中Capabilities選項卡背景模式 部分的藍牙配件。 (您還可以通過在您的應用程序的Info.plist文件中包含帶有 藍牙中央值的UIBackgroundModes密鑰來啓用此支持。)當您啓用此模式時,核心藍牙框架將保持打開任何活動的 會話以用於對應的外設。此外,從外設到達的新數據 會導致系統喚醒應用程序,以便它可以處理數據。系統還會將應用程序喚醒以處理配件連接和斷開通知。

有關更多詳細信息,請參閱Apple documentation

+0

謝謝你的回答@Sunil夏爾馬。目前這個例子與一個發送數據的附件有關,例如心臟監測器,我忘記了它的精確度,但在我的情況下,該設備將與汽車連接。這仍然有效?而且doc會提醒應用程序,但它也比我們有10秒的窗口處理事件的精確度,在這10秒之後,應用程序又回到暫停狀態? –

+0

是的,它仍然可以工作,你只需要在背景模式下選擇**外部配件通訊**。 –