我希望在手機鎖定和解鎖以及手機變爲空白(長時間不活動時)之後讓我的應用程序監視,這一切都是在我的應用程序未聚焦時,但在後臺運行。如何在應用程序在後臺運行時收聽鎖定/解鎖手機事件?
我可以接收鎖定/解鎖/空白事件與易用性,同時應用的重點是:
-(void) startListeningForPhoneLockEvent
{
NSLog(@"Start listening to lock/unlock and screen-goes-black events.");
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
(void*)self,
lockStateChanged,
CFSTR("com.apple.springboard.lockstate"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
CFNotificationCenterAddObserver(CFNotificationCenterGetDarwinNotifyCenter(),
(void*)self,
hasBlankedScreen,
CFSTR("com.apple.springboard.hasBlankedScreen"),
NULL,
CFNotificationSuspensionBehaviorDeliverImmediately);
}
而且回調函數:
static void lockStateChanged(CFNotificationCenterRef center, void*observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
NSLog(@"Lock event received!");
}
static void hasBlankedScreen(CFNotificationCenterRef center, void*observer, CFStringRef name, const void *object, CFDictionaryRef userInfo)
{
NSLog(@"Blanked screen event received!");
}
我已經啓用後臺模式:
- 後臺提取。
但是,一旦應用程序進入後臺,它不會收到鎖定/解鎖/黑屏事件。
我和其他背景模式,如聲音播放,位置更新等,但應用程序嘗試仍無法在後臺時接收鎖定/解鎖/黑屏事件。
我不確定這是否真的有可能,或者我做錯了什麼。
我對更新爲iOS9,採用最新的XCode與iOS9 SDK真實的設備測試它。
我不介意在Swift中的解決方案。 –
僅在應用程序中啓用後臺模式沒有幫助,應用程序實際上應該在後臺運行。當你鎖定/解鎖手機時,你能否確認你的應用程序實際上是在後臺運行? – user3334059
@SumantHanumante,蘋果有沒有限制在後臺運行,聽取鎖定,解鎖事件? –