Android使用MediaPlayer播放音乐文件

这里主要介绍的是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
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值