在Android Studio中使用Java调用setPlaybackParams()时,如何防止MediaPlayer启动?

在Android Studio中使用Java调用setPlaybackParams()时,如何防止MediaPlayer启动?,java,android,android-mediaplayer,Java,Android,Android Mediaplayer,在我的项目中,我需要在启动MediaPlayer之前设置播放参数(MediaPlayer将在用户单击按钮时启动)。但是当我使用下面给出的代码设置播放参数时,MediaPlayer会自动启动 mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(1.5f)); 现在,我该如何阻止它开始呢 (您可以说,我可能只是在单击按钮时设置参数,但它不起作用,因为我有几个MediaPlayers来设置参数。)根据Media

在我的项目中,我需要在启动MediaPlayer之前设置播放参数(MediaPlayer将在用户单击按钮时启动)。但是当我使用下面给出的代码设置播放参数时,MediaPlayer会自动启动

mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(1.5f));
现在,我该如何阻止它开始呢


(您可以说,我可能只是在单击按钮时设置参数,但它不起作用,因为我有几个MediaPlayers来设置参数。)

根据
MediaPlayer
s文档:

public void setPlaybackParams(PlaybackParams params)

使用PlaybackParams设置播放速率。对象设置其内部播放参数 输入,但对象在 输入速度为零。这允许对象在上一个时间恢复 调用start()时的速度在准备对象之前调用它 不会更改对象状态。对象准备好后,, 以零速度调用它相当于调用pause()之后 对象已准备好,以非零速度调用它相当于 正在调用start()

我怀疑您在设置参数之前调用了
mediaPlayer.prepare()
,或者使用了
mediaPlayer.create()
(这相当于同时调用
mediaPlayer.setDataSource()
mediaPlayer.prepare()
),因此,您间接调用了
mediaPlayer.prepare()
),在这种情况下,播放器将在设置参数后开始播放,完全如文档中所述


因此,请使用
mediaPlayer.setDataSource()
,然后设置播放参数(这样它就不会自动启动
mediaPlayer
)。在调用
mediaPlayer.prepare()
之后,在调用
mediaPlayer.start()
之前,如果您需要在不重新启动的情况下更改速度,您可以先检查播放状态,然后在更改速度后使用此信息停止播放: mediaPlayer是您的mediaPlayer实例,速度是您的速度值

var isCurrentlyPlaying:Boolean=mediaPlayer!!.isPlaying
mediaPlayer!!.setPlaybackParams(mediaPlayer!!.getPlaybackParams().setSpeed(speed))
if (!isCurrentlyPlaying) {
    mediaPlayer!!.pause()
}
你明白了。我没有调用mp.prepare(),但我调用了mp.create(),这相当于同时调用mp.setDataSource()和mp.prepare()。因此,我间接地调用了mp.prepare()。如果您更新描述此问题的答案(mp.create()问题),我将接受您的答案。