gpt4 book ai didi

android - 在播放下一个音频之前停止媒体播放器

转载 作者:行者123 更新时间:2023-11-29 20:06:53 25 4
gpt4 key购买 nike

我的应用程序中有一个 ListView 。每个 ListView 项目都有一个按钮,该按钮将从网络服务收到的 url 播放音频。但我的问题是,如果我点击下一个项目的播放按钮,那么两者就会开始一起播放。我在这方面有问题。我只想一次玩一个。现在,每次单击按钮时我都在创建新的媒体播放器对象,但我也尝试创建一个全局对象,但在这种情况下它只播放第一次而不是之后播放。它的可能解决方案是什么。

finalHolder.iv_sound.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
try {
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(birdsUrlList.get(position).getUrl_audio());
mp.prepare();
mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});
//startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(birdsUrlList.get(position).getUrl_video())));
} catch (Exception e) {
e.printStackTrace();
}
}
});

最佳答案

使 mp 变量成为全局变量并删除它:

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.release();
}
});

因为如果你看一下这个引用 http://developer.android.com/reference/android/media/MediaPlayer.html#StateDiagram它说:

Once the MediaPlayer object is in the End state, it can no longer be used and there is no way to bring it back to any other state.

当您调用 mp.release(); 时,媒体播放器将进入该状态。

然后让你的 onClickListener 看起来像这样:

@Override
public void onClick(View v) {
try {
if (mp.isPlaying()) {
mp.stop();
mp.reset();
}

mp.setDataSource(birdsUrlList.get(position).getUrl_audio());
//... and so on

mp.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
mp.stop();
mp.reset();
}
});

这里的技巧是让它回到空闲状态,这样您就可以设置新的数据源并重新开始播放。一切都与各州有关...

关于android - 在播放下一个音频之前停止媒体播放器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35539363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com