2015-12-09 63 views
1

我已經開發iBeacon顯示應用。當應用程序處於後臺模式並且我進入信標區域時,觸發UILocalNotification。但事情是,如果我殺了應用程序的通知仍然觸發。當應用程序處於後臺時,我使用locationMgr.RequestAlwaysAuthorization();來捕獲位置更改。我已經寫了背景安全的任務,以擴大我在iPhone上的背景時間。防止UILocalNotifications當應用程序被殺害

我曾嘗試使用UIApplication.SharedApplication.ApplicationState但是當應用程序在後臺只,而不是終止它返回true。

我使用locationMgr.RequestAlwaysAuthorization();,因爲DidEnterRegion僅在位置設置爲時才被調用總是

一句話我正在尋找解決方案如何監控EnterRegion & ExitRegion只在後臺和活動模式。 沒有當應用程序被殺害

回答

2

在iOS 7.1之前,這是iOS的默認行爲,每個人都抱怨它。自iOS 7.1以來,信標監控將啓動應用程序,即使它們已被殺死。

你需要的是檢測是否當它再次推出這樣你就可以抑制通知應用程序之前已殺死的方式。不幸的是,我不知道有什麼辦法做到這一點。

2

有幾個原因,一個應用程序將被終止(不運行):

  • 因爲用戶主動終止它(在home鍵雙擊,刷卡應用了)

  • 因爲操作系統所需的存儲器,並且終止它

  • 因爲OS更新該應用程序,並終止它

  • ,因爲該設備已重新啓動,並且應用程序尚未啓動

你想避免在所有情況下通知,或僅在第一個?

如果你想避免在所有情況下通知,你可以嘗試刪除你的AppDelegateapplicationWillTerminate:方法本地通知(或爲通知觀察員):

- (void)applicationWillTerminate:(UIApplication *)application 
{ 
    [application cancelLocalNotification:<insert here the notification you saved>]; 
} 

(你可以選擇使用cancelAllLocalNotifications,或搜索使用scheduledLocalNotifications)的通知。

如果你只是想避免在第一種情況的通知,我怕我不知道的任何方式來檢測用戶已經積極終止應用程序。

+0

我試着在AppDelegate的applicationWillTerminate方法中將靜態屬性設置爲true,然後在我的方法中檢查它是否屬實,但它仍然是false.Weird,但似乎'applicationWillTerminate'沒有被調用。 –

+0

用什麼方法?叫什麼時候?除非你從'applicationWillTerminate'調用它,否則它將永遠不會是真的,因爲當時應用程序已經退出。您需要將其保存到某些永久存儲器(例如'NSUserDefaults',一個文件,核心數據...)。您可以通過在那裏添加一個日誌並檢查設備的日誌來檢查是否調用了「applicationWillTerminate」。請注意,如果您從Xcode停止該應用程序,該應用程序將立即終止,並且'applicationWillTerminate'確實不會被調用。 – jcaron

+0

請注意,如果iOS在您的應用程序未運行時終止,即它處於「暫停」狀態,則不會調用「applicationWillTerminate」。如果它不處於掛起狀態,即在後臺運行,則iOS將不願意終止它,除非它已經終止了所有掛起的應用程序,並且仍然需要更多的內存。 *長話短說*,'applicationWillTerminate'幾乎肯定不是你的問題的答案。 – heypiotr

相關問題