在我的應用程序之一,我必須檢測外部聲音,即使應用程序在後臺。我有一個問題。可以在android中連續檢測外部聲音嗎?
即使應用程序處於後臺模式或關閉狀態,是否可以連續檢測外部聲音?如果是這樣會影響設備電池嗎?
如果這是不可能的,那麼是否有任何替代方法來實現這一目標?
Plz讓我知道這件事。
感謝,
在我的應用程序之一,我必須檢測外部聲音,即使應用程序在後臺。我有一個問題。可以在android中連續檢測外部聲音嗎?
即使應用程序處於後臺模式或關閉狀態,是否可以連續檢測外部聲音?如果是這樣會影響設備電池嗎?
如果這是不可能的,那麼是否有任何替代方法來實現這一目標?
Plz讓我知道這件事。
感謝,
編輯:我可能會誤解你
這裏有一個片段我用它來看看是否符合我的服務的MediaPlayer一起audiofocus變化。你不會知道什麼是打不過你就會知道,如果外在的東西請求音頻:
OnAudioFocusChangeListener afChangeListener = new OnAudioFocusChangeListener() {
public void onAudioFocusChange(int focusChange) {
//Manage audiofocus changes
if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT
&& mp != null) {
if (mp.isPlaying())
pausePlaying();
} else if (focusChange == AudioManager.AUDIOFOCUS_GAIN
&& mp != null) {
if (!mp.isPlaying())
pausePlaying();
} else if (focusChange == AudioManager.AUDIOFOCUS_LOSS
&& mp != null) {
am.abandonAudioFocus(afChangeListener);
if (mp.isPlaying())
pausePlaying();
Log.d("FOCUS", "Focus Changed AUDIOLOSS ");
}
}
};
我目前正在對這樣的事情,我已經使用了延伸服務http://developer.android.com/guide/components/services.html類。
正如上面提到的,如果它持續運行,您可能會得到android ANR kill wait選項。有兩種方法可以解決這個問題。
請確保您的服務未在主UI線程上運行,無論是使用Async還是隻是自己對其進行線程化。除此之外,儘量避免使用ANR,儘可能少地進行工作。
我限制了每個服務持續的時間。即服務偵聽幾秒鐘,運行分析並保存,如果滿足條件,則在調用stopSelf()之前創建一個新服務。這可能有點不方便,但它也可以工作,具體取決於你對音頻的實際操作。
您可以使用錄音示例代碼創建服務。是的,如果它在後臺連續運行,它會耗盡你的電池。即使沒有內存,操作系統也可能會殺死它。 – Vigbyor
我同意他 –
感謝您的寶貴迴應 – Rafeeq