2009-12-13 95 views
9

通過使用applicationWillResignActive和applicationDidBecomeActive,我可以檢測到iPhone進入睡眠狀態並從睡眠中回來。但是,我怎麼知道它是什麼樣的中斷。我正在製作一個音頻播放器應用程序,並且需要在iPhone進入睡眠狀態時保持音頻播放(我知道該怎麼做)。但是當消息,鬧鐘或低電池電量中斷髮生時,我需要中斷音頻。當事件結束時,我還需要恢復音頻。檢測iPhone中斷的類型

那麼如何區分這些不同的中斷。

回答

5

該信息可能不適用於您的應用,但這裏有一些要嘗試的操作。

  1. applicationWillResignActive:,檢查NSNotification的對象和用戶信息的屬性,看看是否有任何提示存在。

  2. 註冊,就能獲得所有通知張貼到默認的通知中心:

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didReceiveNotification:) name:nil object:nil]; 
    

什麼時候張貼你的方法將被調用。記錄通知對象和userInfo字典,也許你會看到一個有用的通知張貼。如果你找到一個,你可以註冊。

  1. 這是最棘手的問題,但您可能可以訪問顯示的警報,如果它是消息或電池警告。警報通過應用程序的主UIWindow顯示在UIWindow中。您可以註冊UIWindowDidBecomeVisibleNotification,然後查看窗口的子視圖,查看是否可以找到警報或其他有用的線索。

以上所有方法都將依賴未記錄的行爲來工作,並且可能會讓您的提交在App Store中被拒絕。它們都不涉及私人方法調用,但您可能會認爲觀察未記錄的通知名稱將視爲私有API。最後,蘋果的意見是唯一重要的。

就我個人而言,我會嘗試一下,確保代碼在系統發生變化時優雅地失敗。

+1

嘗試過A和B,但它全部空了。用戶信息中沒有描述或鍵值對。對象也沒有。它奇怪蘋果如何錯過這樣簡單的功能。沒有嘗試C,因爲它看起來太hacky,即使對我來說。 – Prashant 2009-12-15 06:12:32

+1

你可能想重新考慮一下C:如果你只是假設在你的應用上顯示的任何*警告都是暫停音樂的理由,那麼你將不會做任何沒有記錄的事情。它只是圍繞視圖層次結構來讀取將是hacky的警報文本。 – benzado 2009-12-15 06:21:42