VideoView申請音頻焦點問題

問題現象:使用VideoView寫了一個懸浮框播放視頻程序,在懸浮框代碼中註冊音頻焦點監聽事件,監聽懸浮框的音頻焦點獲取和丟失。發現懸浮框和Music同時播放了。

分析:通過log分析當時音頻焦點的獲取情況,如下:
I/MediaFocusControl(  652):  AudioFocus  requestAudioFocus() from android.media.AudioManager@2109af33com.android.gallery3d.app.MoviePlayer$42@38f352f0
I/MediaFocusControl(  652):  AudioFocus  requestAudioFocus() from android.media.AudioManager@347bf9ccom.android.gallery3d.ui.FloatVideoView$1@10964da5
I/MediaFocusControl(  652):  AudioFocus  abandonAudioFocus() from android.media.AudioManager@2109af33com.android.gallery3d.app.MoviePlayer$42@38f352f0
I/MediaFocusControl(  652): AudioFocus  removeFocusStackEntry(): removing entry for android.media.AudioManager@2109af33com.android.gallery3d.app.MoviePlayer$42@38f352f0
I/MediaFocusControl(  652):  AudioFocus  requestAudioFocus() from android.media.AudioManager@347bf9c
I/MediaFocusControl(  652):  AudioFocus  abandonAudioFocus() from android.media.AudioManager@204847cc
I/MediaFocusControl(  652):  AudioFocus  requestAudioFocus() from android.media.AudioManager@c5fd86dcom.android.music.MediaPlaybackService$3@a0e8ca2


會發現,首先視頻播放器MoviePlayer獲取焦點。再打開懸浮框,懸浮框FloatVideoView獲取焦點,MoviePlayer丟失焦點。可是在這裏我們會發現,緊接着未知東西又申請了音頻焦點,造成懸浮框FloatVideoView丟失音頻焦點,而且沒有再獲取。故,當進入Music時候兩者同時響起。

通過跟蹤代碼發現在VideoView中有申請音頻焦點:
/frameworks/base/core/java/android/widget/VideoView.java
protected void openVideo() {
        ........
        AudioManager am = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);
        am.requestAudioFocus(null, AudioManager.STREAM_MUSIC, AudioManager.AUDIOFOCUS_GAIN);
        ........
}
同時,由於requestAudioFocus的監聽事件(第一個參數)爲空,所以在log中不會打印出申請音頻焦點的類名。也就造成了該現象。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章