Android使用MediaPlayer播放音乐文件

来源:互联网 发布:微商版微信是什么软件 编辑:程序博客网 时间:2024/05/18 18:18

这里主要介绍的是SeekBar拖动条和MediaPlayer播放器;

最近项目添加一个音乐播放页面,让用户可以试听警报声,所以实现单曲播放,但是只要单曲可以实现,多曲也非常简单;

首先看下布局文件,在这只复制SeekBar:(其他的布局文件太简单了,如果想看可以下载demo)

            <!--            android:max="100"           设置最大进度            android:progress="0"        设置当前进度            android:secondaryProgress="":设置第二进度            android:thumb="":           设置滑动按鈕的图片            android:progressDrawable="":进度条背景图片            -->            <SeekBar                android:id="@+id/seekbar"                android:layout_width="0dp"                android:layout_height="match_parent"                android:layout_gravity="center_vertical"                android:layout_weight="1"                android:max="100"                android:padding="10dp"                android:progress="0"                android:progressDrawable="@drawable/po_seekbar"                android:thumb="@mipmap/img_point_seekbar" />
SeekBar的背景图片需要自己创建,在drawable文件夹下创建po_seekbar.xml文件:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">    <!--进度条北京-->    <item android:id="@android:id/background">        <shape>            <solid android:color="#c3c9d4" />        </shape>    </item>    <!--缓冲背景颜色,没有用到(如果网络加载视频文件可以用到)-->    <item android:id="@android:id/secondaryProgress">        <clip>            <shape>                <solid android:color="#ff0000" />            </shape>        </clip>    </item>    <!--已加载的背景颜色-->    <item android:id="@android:id/progress">        <clip>            <shape>                <solid android:color="#34b282" />            </shape>        </clip>    </item></layer-list>


当用户点击报警铃声跳转此页面,会直接播放音乐;

播放音乐非常简单,按照官方要求初始化MediaPlayer即可:

MediaPlayer mediaPlayer = new MediaPlayer();        //音乐播放完成的监听        mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {            @Override            public void onCompletion(MediaPlayer mp) {                //真实项目中可根据需求更改            }        });
//第一步:重置            mediaPlayer.reset();            //第二步:设置数据源(这里播放的是本地文件,可播放其他文件)            mediaPlayer.setDataSource(activity, musicUri);            //第三步:准备            mediaPlayer.prepare();            //第四步:播放            mediaPlayer.start();


开始播放以后我们根据MediaPlayer不停的获取音乐总时长和当前进度设置在指定view上:
// 获取当前播放的音乐的总时长,当前进度                int duration = mediaPlayer.getDuration();                int currentPosition = mediaPlayer.getCurrentPosition();


正在播放的时候如果用户点击开关需要暂停播放音乐:
//暂停    private void pause() {        if (mediaPlayer != null && mediaPlayer.isPlaying())            //暂停            mediaPlayer.pause();        //停止timer        if (timer != null) {            timer.cancel();            timer = null;        }    }


用户再次点击开关需要继续播放音乐:
    //继续播放    private void continuePlay() {        if (mediaPlayer != null)            // start();播放、继续播放            mediaPlayer.start();        //继续播放,重新开启timer        getProgressByTimer();    }
再次点击暂停;


实现拖拽播放:

首先给SeekBar设置拖拽监听:

//设置进度改变监听        mSeekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            //进度改变回调            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {}            //开始拖拽回调            public void onStartTrackingTouch(SeekBar seekBar) {}            //停止拖拽回调            public void onStopTrackingTouch(SeekBar seekBar) {                //获取当前拖拽的位置                int dragedProgress = seekBar.getProgress();                //记录拖拽的位置                Constants.CURRENT_PROGRESS=dragedProgress;                  musicUtils.start();            }        });
当停止拖拽时记录拖拽的位置,MediaPlayer可根据拖拽位置播放;
    //拖拽    private void dragPlay() {        if (mediaPlayer != null) {            //播放指定位置            mediaPlayer.seekTo(Constants.CURRENT_PROGRESS);        }    }

我们这里只是为了让用户试听报警音乐,所以并没有过多的逻辑,但是MediaPlayer主要的功能方法都用到了;


点击打开链接免费下载源码



0 0
原创粉丝点击