2017-03-04 187 views
0

因此,我正在研究一個鬧鐘應用程序,並且當我在設備中有耳機插孔時,使用外接揚聲器來使用揚聲器電話時遇到了麻煩。我發現this solution,但正如評論所說,這不是一個可靠的方法來做到這一點。我還發現有人有類似的問題here,並且有一個方法SimpleExoPlayer.setAudioStreamType(),但不幸的是它在ExoPlayer 2.0.4中不起作用。有任何想法嗎?使exoPlayer 2.0通過揚聲器播放

回答

1

好吧,我找到了解決方案!當您創建exoPlayer時,您可以使用默認渲染器(即ExoPlayerFactory.newSimpleInstance())或創建自己的渲染器來執行特定的操作。默認音頻渲染器(MediaCodecAudioRenderer)的問題在於它默認設置了AudioManager.STREAM_MUSIC,並且ExoPlayer 2.x沒有任何方法來更改它(儘管ExoPlayer 1.x中有這種方法)。

爲了解決這個問題,我必須創建自己的音頻渲染器並將AudioManager.STREAM_ALARM作爲其參數之一。之後,您可以使用ExoPlayerFactory.newInstance()並將創建的渲染器傳遞給它。

下面是一個類,您可以使用它來獲取將始終通過揚聲器電話播放音樂的ExoPlayer實例。它也將使用警報音量級別。

public class AlarmExoPlayerFactory { 

    public static ExoPlayer newInstance() { 
     Renderer[] renderers = new Renderer[1]; 

     Renderer audioRenderer = new MediaCodecAudioRenderer(MediaCodecSelector.DEFAULT, null, true, 
       null, null, null, AudioManager.STREAM_ALARM); 
     renderers[0] = audioRenderer; 

     Handler handler = new Handler(); 
     TrackSelector trackSelector = new DefaultTrackSelector(handler); 
     return ExoPlayerFactory.newInstance(renderers, trackSelector); 
    } 
} 
相關問題