Android 處理音訊焦點 AudioFocus

2021-07-25 22:09:55 字數 1469 閱讀 2174

在給定的時間儘管只有乙個活動可以執行,但android是乙個多工環境。這對應用程式使用音訊造成了乙個特別大的難度,由於只有乙個音訊輸出,可能會有好幾個**服務爭奪使用它。

android2.2之前,沒有內建機制來解決這個問題,這可能在某些情況下導致糟糕的使用者體驗。例如,乙個使用者正在聽**,同時另乙個應用程式有很重要的事需要通知使用者,由於吵鬧的**使用者可能不會聽到提示音。從android2.2開始,android平台為應用程式提供了乙個方式來協商裝置的音訊輸出,這個機制被稱為音訊焦點

請求音訊焦點,您必須從audiomanager呼叫requestaudiofocus()方法,

下面展示乙個例子:

audiomanager audiomanager = (audiomanager)getsystemservice(context.audio_service);

int result = audiomanager.requestaudiofocus(this,audiomanager.stream_music,

audiomanager.audiofocus_gain);

if (result != audiomanager.audiofocus_request_granted)

requestaudiofocus()的第乙個引數是audiomanager.onaudiofocuschangelistener,每當音訊焦點有變動的時候其onaudiofocuschange()方法被呼叫。

您還應該在你的服務和活動上實現這個介面。 **如下:

class myservice extends service

implements audiomanager.onaudiofocuschangelistener

}focuschange引數告訴你音訊焦點是如何改變的,並且可以使用以下的值之一(他們都是在audiomanager中定義常量的): 

下面是乙個示例實現:

public void onaudiofocuschange(int focuschange)

}記住,音訊焦點apis在api級別8(android2.2)及以上才有效,所以如果你想要支援的以前版本的android,(如果有的話)你應該採取一種向後相容性策略,允許您使用該特性,(如果沒有的話),只能選擇8以後的版本。 

通過反射呼叫音訊焦點方法或通過在乙個單獨類中實現所有的音訊焦點特性,您可以實現向後相容性(audiofocushelper中闡明)。下面是這樣乙個類的示例:

public class audiofocushelper implementsaudiomanager.onaudiofocuschangelistener

public boolean requestfocus()

public boolean abandonfocus()

@override

public void onaudiofocuschange(int focuschange)

}

Android音訊焦點

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

音訊焦點處理

場景 聽 來了 此時 停止,結束通話 繼續。1,在service的oncreate方法中加入以下 建立audiomanger audiomanager audiomanager audiomanager getsystemservice context.audio service int resul...

Android音訊焦點(一)

在android8.0之前,如果請求焦點使用了audiomanager.audiofocus gain transient may duck引數,它表明希望擁有了音訊焦點的其他應用降低音量來使用音訊,然而並不是所有的應用都會這樣做 也可能是開發者忘記優化 因為這並不是系統強制的。但是從android...