在 Android Studio 中使用 Java 调用 setPlaybackParams() 时如何防止 MediaPlayer 启动?
How to prevent MediaPlayer from getting started when setPlaybackParams() is called using Java in Android Studio?
在我的项目中,我需要在启动 MediaPlayer 之前 设置播放参数 (MediaPlayer 将在用户单击 按钮 时启动)。但是当我使用下面给出的代码设置播放参数时,MediaPlayer 会自动启动。
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(1.5f));
现在,我该如何阻止它启动?
(你可以说,我可能只是在点击按钮时设置参数,但它不会起作用,因为我有几个 MediaPlayers 来设置参数。)
根据 MediaPlayer
s 文档:
public void setPlaybackParams (PlaybackParams params)
Sets playback rate using PlaybackParams. The object sets its internal PlaybackParams
to the input, except that the object remembers previous speed when
input speed is zero. This allows the object to resume at previous
speed when start() is called. Calling it before the object is prepared
does not change the object state. After the object is prepared,
calling it with zero speed is equivalent to calling pause(). After the
object is prepared, calling it with non-zero speed is equivalent to
calling start().
我怀疑你在设置参数之前调用了 mediaPlayer.prepare()
或者你使用了 mediaPlayer.create()
(相当于同时调用 mediaPlayer.setDataSource()
和 mediaPlayer.prepare()
. 因此,您间接调用了 mediaPlayer.prepare()
),在这种情况下,播放器将在设置参数后开始播放,这与文档中的描述完全相同。
所以,使用mediaPlayer.setDataSource()
然后设置播放参数(这样它就不会自动启动mediaPlayer
)。在调用 mediaPlayer.start()
.
之前调用 mediaPlayer.prepare()
如果您需要在不重启的情况下改变速度,您可以先检查播放状态,然后使用此信息在改变速度后立即停止播放:
mediaPlayer 是您的 Mediaplayer 实例,speed 是您的 speed
值
var isCurrentlyPlaying:Boolean=mediaPlayer!!.isPlaying
mediaPlayer!!.setPlaybackParams(mediaPlayer!!.getPlaybackParams().setSpeed(speed))
if (!isCurrentlyPlaying) {
mediaPlayer!!.pause()
}
在我的项目中,我需要在启动 MediaPlayer 之前 设置播放参数 (MediaPlayer 将在用户单击 按钮 时启动)。但是当我使用下面给出的代码设置播放参数时,MediaPlayer 会自动启动。
mediaPlayer.setPlaybackParams(mediaPlayer.getPlaybackParams().setSpeed(1.5f));
现在,我该如何阻止它启动?
(你可以说,我可能只是在点击按钮时设置参数,但它不会起作用,因为我有几个 MediaPlayers 来设置参数。)
根据 MediaPlayer
s 文档:
public void setPlaybackParams (PlaybackParams params)
Sets playback rate using PlaybackParams. The object sets its internal PlaybackParams to the input, except that the object remembers previous speed when input speed is zero. This allows the object to resume at previous speed when start() is called. Calling it before the object is prepared does not change the object state. After the object is prepared, calling it with zero speed is equivalent to calling pause(). After the object is prepared, calling it with non-zero speed is equivalent to calling start().
我怀疑你在设置参数之前调用了 mediaPlayer.prepare()
或者你使用了 mediaPlayer.create()
(相当于同时调用 mediaPlayer.setDataSource()
和 mediaPlayer.prepare()
. 因此,您间接调用了 mediaPlayer.prepare()
),在这种情况下,播放器将在设置参数后开始播放,这与文档中的描述完全相同。
所以,使用mediaPlayer.setDataSource()
然后设置播放参数(这样它就不会自动启动mediaPlayer
)。在调用 mediaPlayer.start()
.
mediaPlayer.prepare()
如果您需要在不重启的情况下改变速度,您可以先检查播放状态,然后使用此信息在改变速度后立即停止播放: mediaPlayer 是您的 Mediaplayer 实例,speed 是您的 speed
值var isCurrentlyPlaying:Boolean=mediaPlayer!!.isPlaying
mediaPlayer!!.setPlaybackParams(mediaPlayer!!.getPlaybackParams().setSpeed(speed))
if (!isCurrentlyPlaying) {
mediaPlayer!!.pause()
}