2012-02-01 44 views
3

我想知道何時音頻模式(由AudioManager.getMode()返回)已更改。這樣可以在模式不是MODE_NORMAL時禁用我的應用程序中的功能。很明顯,我可以進行輪詢,但這不是電池友好的,而且是CPU的浪費。Android音頻模式更改通知

有廣播的意圖,當有電話打進來,但就是不能使用,因爲它也告訴你的來電號碼,我不希望我的應用程序這些權限。用戶切換到另一個應用程序(在這種情況下我的活動可能會知道)中可能會發生模式更改,但在許多其他情況下,音頻模式可能會發生變化,我只是不知道。

我不能使用2.2中的AudioFocus東西,因爲我需要支持1.6以上版本。

編輯:我想停止的功能類型包括抖動檢測和各種定時器。我想在非正常音頻模式下進入休眠模式,並在MODE_NORMAL上再次激活。

回答

2

我會建議兩個階段的攻擊。

將AudioFocus用於它支持的平臺。這就像90%的手機,所以對於大多數用戶來說,這將提供最好的解決方案。沒有理由你的應用不能支持這兩種實現,只是在運行時提供適合底層平臺的實現。

對於1.6,我會建議如下。據推測,你想影響你的應用程序的功能是某種音頻播放。如果您的應用程序正在播放音頻,查詢音頻模式更改的輪詢增量電池消耗會相對較小。

當您不播放音頻時,您只需在開始播放音頻之前查詢當前的音頻模式。

對於您指定的情況,監聽傳感器更改和運行計時器的電池影響會再次降低輪詢音頻模式的效果 - 特別是當您試圖在任何模式下啓用您的功能時是正常的。

由於您只希望在短時間內禁用某些功能,因此您最好在執行您希望在通話期間禁用的任何操作之前立即查詢音頻模式。

因此步驟變得:播放/行動之前

  • 檢查音頻模式。
  • 回放期間輪詢音頻模式。
+0

我已更新到問題澄清。我在音頻播放過程中確實進行了輪詢,但現在是時間片段。這是我關心的其餘時間。版本支持是不可協商的。 – 2012-02-01 19:43:55