Android 调用.prepare()几秒钟后用ExoPlayer播放音频文件

Android 调用.prepare()几秒钟后用ExoPlayer播放音频文件,android,audio,exoplayer,Android,Audio,Exoplayer,我的应用程序中有一个功能,需要多次播放一个短音频文件,使用下面的代码,我正在准备ExoPlayer播放音频: SimpleExoPlayer player; private void readyExoPlayerRaw(int rawSound) { player = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector()); DataSpec dataSpec = new DataSpec(RawR

我的应用程序中有一个功能,需要多次播放一个短音频文件,使用下面的代码,我正在准备
ExoPlayer
播放音频:

SimpleExoPlayer player;
private void readyExoPlayerRaw(int rawSound) {
    player = ExoPlayerFactory.newSimpleInstance(this, new DefaultTrackSelector());
    DataSpec dataSpec = new DataSpec(RawResourceDataSource.buildRawResourceUri(rawSound));
    final RawResourceDataSource rawResourceDataSource = new RawResourceDataSource(this);
    try {
        rawResourceDataSource.open(dataSpec);
    } catch (RawResourceDataSource.RawResourceDataSourceException e) {
        e.printStackTrace();
    }
    MediaSource audioSource = 
        new ExtractorMediaSource.Factory(
            new DefaultDataSourceFactory(this, "appName"))
            .createMediaSource(rawResourceDataSource.getUri());

    player.prepare(audioSource);
    //player.setPlayWhenReady(true);
}
问题是,当我取消注释最后一行(
//player.setplaywhenredy(true);
)时,声音会播放得很好,但由于我在运行此方法几秒钟后播放声音,这一行代码不会工作!我认为这是因为它等待前一行的回调(
.prepare(…)
),当它准备好时,它就会播放。所以我想也许我应该在播放器上调用
start()
或者类似的东西,但是没有这样的方法

因此,每次我想播放音频时,我都会调用
.prepare()
,但由于播放间隔很短,因此调用
prepare()
会导致不适当的延迟


我是不是错过了什么?我怎样才能在不重新准备的情况下播放准备好的
MediaSource

setPlayWhenReady
是暂停和播放音频的方式,但它只有在“准备就绪”或准备就绪时才会真正播放

因此,您只需在onResume或onCreate中调用一次您的
readyexoplayraw
。然后在该方法结束时,您可以设置
playWhenReady(false)
,以便在您告诉它之前它不会开始播放

然后,当您想要播放声音时,请执行以下操作:

private void playSound() {
    // Go to the beginning of the audio (in case it has played before)
    player.seekTo(0);
    // Tell it to play the sound
    exoPlayer. setPlayWhenReady(true);
}
让我知道这是否有效