在项目中,有时候遇到要求,点击播放下一曲无法播放的问题。明明调用了start()方法了,为什么还是不行呢。
以下是我的代码
mediaPlayer=new MediaPlayer(); mediaPlayer.setDataSource(url[0]); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepareAsync(); mediaPlayer.start();
相信大家都懂这段代码了吧,mediaPlayer.prepareAsync();是为了异步加载网络数据,如果不这样可能app直接卡死掉。如果上面有报错记得try、catch。
后面想到了异步,那么可能是不及时的,比如说mediaPlayer.prepareAsync();刚开始是没任何东西的,可能需要延迟个几秒或毫秒才会得以加载网络的数据。那这个时候再执行mediaPlayer.start();肯定是没有播放的。后面想到了休眠,没错就是这么简单,将代码改成了
mediaPlayer=new MediaPlayer(); mediaPlayer.setDataSource(url[0]); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.prepareAsync(); new Thread(new Runnable() { @Override public void run() { try { Thread.sleep(2000); mediaPlayer.start(); }catch (Exception e){} } }).start();
问题得以解决。
贴上全部代码,app界面如图:
播放java文件
package com.wt.authenticwineunion.page.buys.activity;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.free.statuslayout.manager.StatusLayoutManager;
import com.wt.authenticwineunion.R;
import com.wt.authenticwineunion.base.BaseActivity;
import com.wt.authenticwineunion.base.BasePresenter;
import com.wt.authenticwineunion.util.ToastUtil;
import com.wt.authenticwineunion.widget.TitleView;
import butterknife.BindView;
import butterknife.OnClick;
/**
* 将音频以数组的格式返回过来,然后将他们进行下一首
* */
public class PlayAudio2Activity extends BaseActivity {
@BindView(R.id.title_view)
TitleView titleView;
@BindView(R.id.user_img)
ImageView userImg;
@BindView(R.id.title)
TextView title;
@BindView(R.id.title2)
TextView title2;
@BindView(R.id.new_time)
TextView newTime;
@BindView(R.id.all_time)
TextView allTime;
@BindView(R.id.progress)
ProgressBar progress;
@BindView(R.id.tui)
ImageView tui;
@BindView(R.id.last)
ImageView last;
@BindView(R.id.play)
ImageView play;
@BindView(R.id.next)
ImageView next;
@BindView(R.id.jin)
ImageView jin;
@BindView(R.id.content)
TextView content;
@BindView(R.id.toComment)
TextView toComment;
@BindView(R.id.number1)
TextView number1;
@BindView(R.id.pinlun)
LinearLayout pinlun;
@BindView(R.id.number2)
TextView number2;
@BindView(R.id.like)
LinearLayout like;
@BindView(R.id.fenxiang)
LinearLayout fenxiang;
private MediaPlayer mediaPlayer;
private int w=0;
private String url[]={"http://sc1.111ttt.cn:8282/2018/1/03m/13/396131232171.m4a?tflag=1546606800&pin=97bb2268ae26c20fe093fd5b0f04be80#.mp3",
"http://sc1.111ttt.cn:8282/2018/1/03m/13/396131226156.m4a?tflag=1546606800&pin=97bb2268ae26c20fe093fd5b0f04be80#.mp3",
"http://sc1.111ttt.cn:8282/2017/1/05m/09/298092035545.m4a?tflag=1546606800&pin=97bb2268ae26c20fe093fd5b0f04be80#.mp3"};
@Override
protected void initStatusLayout() {
statusLayoutManager = StatusLayoutManager.newBuilder(this)
.contentView(R.layout.activity_play_audio2)
.loadingView(R.layout.loading_layout)
.build();
statusLayoutManager.showContent();
}
@Override
public void initView(Bundle bundle) {
try {
mediaPlayer=new MediaPlayer();
mediaPlayer.setDataSource(url[0]);
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.prepareAsync();
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(2000);
mediaPlayer.start();
}catch (Exception e){}
}
}).start();
// mediaPlayer.reset();
}catch (Exception e){