- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
setOnCompletionListener
仅在第一次检测歌曲的完成。在下面的代码中,song1
和 song2
依次播放,但没有播放剩余的歌曲。
我想一首一首地播放歌曲,并在歌曲之间添加一些静音。
MediaPlayer song0=new MediaPlayer();
int track = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
song0=MediaPlayer.create(this,R.raw.song1);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
function();
}
});
song0.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer song0) {
track++;
loadsong();
function();
}
});
}
void loadsong()
{
if(track==1) song0=MediaPlayer.create(this,R.raw.song2);
if(track==2) song0=MediaPlayer.create(this,R.raw.song3);
if(track==3) song0=MediaPlayer.create(this,R.raw.song4);
}**strong text**
void function(){
if(track<4) song0.start();
else
song0.stop();
}
最佳答案
问题在于每次需要播放歌曲时都需要创建 MediaPlayer 对象。因此,每次为另一首歌曲创建 MediaPlayer 对象后,都需要设置 OnCompletionListener。
因此,您可以更改代码中的几行来解决问题。
MediaPlayer song0=new MediaPlayer();
int track = 0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
song0=MediaPlayer.create(this,R.raw.song1);
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
function();
}
});
song0.setOnCompletionListener(m_CompletionListener);
}
void loadsong()
{
if(track==1) {
song0=MediaPlayer.create(this,R.raw.song2);
song0.setOnCompletionListener(m_CompletionListener);
}
if(track==2) {
song0=MediaPlayer.create(this,R.raw.song3);
song0.setOnCompletionListener(m_CompletionListener);
}
if(track==3) {
song0=MediaPlayer.create(this,R.raw.song4);
song0.setOnCompletionListener(m_CompletionListener);
}
}**strong text**
void function(){
if(track<4) song0.start();
else
song0.stop();
}
MediaPlayer.OnCompletionListener m_CompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer song0) {
track++;
loadsong();
function();
}
};
另一种实现方式是只创建一个 MediaPlayer 对象,而不是每次都创建 MediaPlayer 对象,调用 setDataSource 函数来播放其他歌曲。如果您需要这种方式的更多细节,我也可以制作示例代码。
希望对您有所帮助!
关于android - setOnCompletionListener 仅在第一次检测完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47990675/
我有一个 MediaPlayer 的 onCompletion 监听器,但在 MediaPlayer 停止后它无法工作,并且会导致错误。我想在音频停止后更改按钮背景;这是代码: btnPlay.s
setOnCompletionListener 仅在第一次检测歌曲的完成。在下面的代码中,song1 和 song2 依次播放,但没有播放剩余的歌曲。 我想一首一首地播放歌曲,并在歌曲之间添加一些静音
我正在使用 Kotlin 开发音乐播放器应用。我在我的 MainActivity 中定义了一个 mediaPlayer 对象,并在 SongPlayingFragments 中使用它。我遇到的问题是下
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
在我为 MediaPlayer 设置 oncompletetionlistener 后。媒体播放器释放后再次使用相同的按钮,会使应用程序崩溃。媒体播放器释放后如何调用事件来播放音频? public c
在我的应用程序中,我在 ListView 中显示我的音频文件,当单击列表项时,必须使用搜索栏在 ListView 单元格内播放特定文件。但现在我想在播放结束时更新用户界面。我用过 onCompleti
这是我的代码 fragment ,我想在其中播放来自服务器的视频 private void PlayVideo() { try { getWindow().setFormat(
我是一名优秀的程序员,十分优秀!