Android 使exoPlayer 2.0通过扬声器播放

Android 使exoPlayer 2.0通过扬声器播放,android,exoplayer,audiotrack,Android,Exoplayer,Audiotrack,因此,我正在开发一个闹钟应用程序,当我在设备中安装了耳机插孔时,我很难让exoplayer使用扬声器。我发现了,但正如评论所说,这实际上不是一种可靠的方法。我还发现有人有类似的问题,并且有一个方法SimpleExoPlayer.setAudioStreamType(),但不幸的是,它在ExoPlayer 2.0.4中不起作用。有什么想法吗?好吧,我找到了解决办法!创建exoPlayer时,您可以使用默认渲染器(这就是ExoPlayerFactory.newImpleInstance()的功能),

因此,我正在开发一个闹钟应用程序,当我在设备中安装了耳机插孔时,我很难让exoplayer使用扬声器。我发现了,但正如评论所说,这实际上不是一种可靠的方法。我还发现有人有类似的问题,并且有一个方法
SimpleExoPlayer.setAudioStreamType()
,但不幸的是,它在ExoPlayer 2.0.4中不起作用。有什么想法吗?

好吧,我找到了解决办法!创建exoPlayer时,您可以使用默认渲染器(这就是ExoPlayerFactory.newImpleInstance()的功能),也可以创建自己的渲染器来执行特定的操作。默认音频渲染器(即
MediaCodeAudioRenderer
)的问题在于,它默认设置了
AudioManager.STREAM_MUSIC
,ExoPlayer 2.x没有任何方法更改它(尽管ExoPlayer 1.x中有这样的方法)

为了解决这个问题,我必须创建自己的音频渲染器,并将
AudioManager.STREAM\u 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);
    }
}