1.要播放音频,必须在res文件夹下建立一个raw的文件夹用于存放音频文件。系统会自动根据文件名产生一个Id,调用的时候直接R.raw.文件名即可【文件名不可以为中文】。
2.创建一个MediaPlayer对象,根据API可以知道使用MediaPlayer的静态方法create(context,resource.id);该方法有两个参数context是指当前的上下文,resource.id是资源文件的id,即音频文件的id.
3.设置一个用于启动播放的按钮,并设置按钮触发事件。这里因为是将播放和暂停集合到同一个按钮上(即点击播放的时候,按钮改变成暂停;点击暂停,按钮变成播放),所以需要注意的是需要判断当前的播放状态,设置一个播放状态的布尔变量,具体实现如下图所示:
- 播放音频文件的时候可以设置一个音频进度条,如果需要进度条跟随音乐播放而显示播放进度的时候,因为是同步的,所以需要开启一个线程。通过计算来定时设置进度条的位置。
公式:进度条当前位置=当前音频播放的时间位置/音频总时长*进度条的总长度
这里需要特别注意的是:
注意点1:时间是以毫秒计算的,这样数字就比较大,所以这里需要使用long类型来表示。
注意点2:当前音频播放时间的位置小于音频总时长,如果是long型相除的话,结果就变成0了,所以需要转换成double型再除。具体实现如下
- 如果需要拖动进度条,可以使用进度条的setOnSeekBarChangeListener方法,使用该方法的时候需要实现该方法中的一个匿名内部类。而该内部类中有3个方法。
onStopTrackingTouch:当拖动停止的时候
onStartTrackingTouch:当拖动开始的时候
onProgressChanged:进度条发生变化的时候
具体实现如下:
该方法存在一定问题,因为当拖动的时候,线程还在运行,不断给进度条的process赋值,所以这里需要在滚动条刚开始拖动的时候就将线程挂起,当拖动完成后再恢复。