Android音訊焦點(一)

2021-10-22 06:57:45 字數 1660 閱讀 3258

在android8.0之前,如果請求焦點使用了audiomanager.audiofocus_gain_transient_may_duck引數,它表明希望擁有了音訊焦點的其他應用降低音量來使用音訊,然而並不是所有的應用都會這樣做(也可能是開發者忘記優化),因為這並不是系統強制的。但是從android8.0開始,這個降低音量的工作就是系統預設行為了,可以說是乙個良心的優化。如果我不希望系統給我自動降低音量,而是想自己暫停音訊相關的工作,那咋辦?這個可以通過audiofocusrequest.builder.setwillpausewhenducked(true)方法取消系統的預設行為,然後通過監聽音訊焦點變化,來自己處理。

在請求音訊焦點的時候,我們需要監聽焦點的變化,以便做出正確的行為,我們需要設定並實現onaudiofocuschangelistener介面。

public inte***ce onaudiofocuschangelistener

根據引數int focuschange的值,我們需要做出合適的行為,而這些值大致可以分為兩種型別,一種是短暫失去焦點,另一種是永久失去焦點。

我們在專案中處理錄音的時候,需要去請求焦點,於是我做了乙個簡單的封裝,**如下:

public class audiofocusmanager implements audiomanager.onaudiofocuschangelistener

/** * request audio focus.

*/public void requestfocus()

mfocusrequest = new audiofocusrequest.builder(audiomanager.audiofocus_gain)

.setaudioattributes(maudioattributes)

.setwillpausewhenducked(true)

.setonaudiofocuschangelistener(this)

.build();

}result = maudiomanager.requestaudiofocus(mfocusrequest);

} else

if (monrequestfocusresultlistener != null)

}@override

public void onaudiofocuschange(int focuschange)

}/**

* release audio focus.

*/public void releaseaudiofocus() else

}/**

* handle the result of audio focus.

*/public inte***ce onrequestfocusresultlistener

public void setonhandleresultlistener(onrequestfocusresultlistener listener)

/** * same as audiomanager.onaudiofocuschangelistener.

*/public inte***ce onaudiofocuschangelistener

public void setonaudiofocuschangelistener(onaudiofocuschangelistener listener)

Android音訊焦點

ad 獲取音訊焦點 可以通過呼叫 requestaudiofocus 來實現,如果請求成功,返回 audiofocus request granted 您必須指定流型別 使用的是哪乙個流 和音訊焦點的型別 短暫的或是持久的 下面的 片斷演示了請求 音訊流的永久音訊焦點。abandon audio f...

Android 處理音訊焦點 AudioFocus

在給定的時間儘管只有乙個活動可以執行,但android是乙個多工環境。這對應用程式使用音訊造成了乙個特別大的難度,由於只有乙個音訊輸出,可能會有好幾個 服務爭奪使用它。android2.2之前,沒有內建機制來解決這個問題,這可能在某些情況下導致糟糕的使用者體驗。例如,乙個使用者正在聽 同時另乙個應用...

Android音訊焦點詳解(上)

private void initdata 10 非同步準備 mmediaplayer.prepareasync catch ioexception e 我們重點看一下第2步 申請焦點 通過audiomanager物件呼叫requestaudiofocus方法,有三個引數 onaudiofocusc...