2013-10-07 22 views
21

我一直在測試新的動作活動管理器API(CMMotionActivityManager)。我想創建一個應用程序,該應用程序可以在應用程序未在前臺運行時接收和處理來自startActivityUpdatesToQueue的動作更新。當應用處於前臺時,我會正確接收動作更新(靜止,走路,跑步,汽車,未知),但一旦它進入背景(因此被暫停),動作更新將不再被應用接收。CMMotionActivityManager - 在應用程序被暫停或在後臺時接收動作活動更新

CMMotionActivityManager Class Reference: 「此方法啓動異步跟蹤運動數據,運動活動管理器在指定的隊列上執行處理程序塊,報告當前對設備有效的運動,之後,運動活動管理器只有在動作數據發生變化時才執行處理程序塊 處理程序塊以盡力而爲的方式執行,並且在您的應用程序暫停時不會傳送更新如果在您的應用程序暫停時到達了更新,則會傳送上次更新當您的應用程序暫停時,要獲取所有更新,請使用queryActivityStartingFromDate:toDate:toQueue:withHandler:方法。「

我想讓我的應用程序在後臺運行並接收運動數據(實時)。目前保持應用程序在後臺運行的唯一方法是使用後臺服務,但「運動更新」不在允許的後臺服務列表中:

App Store Review Guidelines:「多任務應用程序可能只爲其預期使用後臺服務用途:VoIP,音頻播放,位置,任務完成,本地通知等。「 我不想一直有位置更新(GPS)(以節省電池)。如果我通過連續的位置更新進行存儲,但關閉GPS,該應用將被暫停。

請讓我知道如何讓我的應用程序在後臺運行並接收動作活動更新。 必須有辦法做到這一點:我試過Strava應用程序....即使應用程序在後臺,當用戶暫停運行時,它也會關閉GPS。當用戶恢復運行時,它會自動打開GPS(應用程序處於後臺),這可能意味着該應用程序正在後臺運行,即使在GPS關閉時也會主動接收動作活動更新。

預先感謝您!

+0

@Jackson。您是否找到任何解決方案或替代方案? –

+0

@AshokKumarS不是真的,但我認爲下面的答案解釋了它。你需要製作應用程序通過其他方式在後臺運行,然後像平常一樣使用Core Motion。 – Jackson

回答

2

這不是一個新問題。從未有過Core Motion背景使用設置。如果您的應用程序在後臺運行,您可以使用Core Motion,但要使其在後臺運行,您必須執行其他操作(例如,在用戶將應用程序發送到後臺時獲取位置更新,而您請在Info.plist中列出location後臺服務

請注意,在iOS 7中,如果您擁有合適的硬件,則可以使用延遲位置更新在後臺定期喚醒您的應用程序,從而節省功耗但您的應用程序現在可以在後臺運行,而無需Info.plist後臺服務列表。

+0

爲了澄清,你的意思是啓用startActivityUpdatesToQueue從didFinishLaunchingWithOptions權利,例如,當應用程序進入後臺,然後調用startUpdatingLocation,並在某種程度上在後臺的位置更新將觸發一個activityUpdate?或者你說在locationManager中放置startActivityUpdatesToQueue:didUpdateLocations:?Tx – Spectravideo328

+0

@ Spectravideo328我只是說你的應用沒有在後臺運行,除非它正在運行背景(並且僅僅使用Core Motion並不是一種可以這樣做的方式)。 – matt

+0

好的謝謝。所以僅以.plist背景模式列出位置更新是不夠的,應用程序應該在後臺實際更新位置(並返回locationManager:didUpdateLocations)。而且由於該應用程序正在後臺運行,那麼coremotion將會標記?正確? – Spectravideo328

相關問題