android MediaPlayer无法自动播放问题,切换下一首,自动播放下一首。

在项目中,有时候遇到要求,点击播放下一曲无法播放的问题。明明调用了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){
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值