方法:
装载音频文件:
StaticMediaPlayer 1.create(Context context,Uriuri,SurfaceHolder holder)
指定从资源ID对应的资源文件中来装载音乐文件,同时指定了SurfaceHolder对象并返回MediaPlayer对象
2.create(Context context,intresid)
指定从资源ID对应的资源文件中来装载音乐,并返回新创建的MediaPlayer对象
3.create(Context context,Uriuri)
从指定Uri装在音频文件,并返回新创建的MediaPlayer对象。
1、getCurrentPosition() 获取当前播放位置
2、getDuration() 获取音频的时常
3、isPlaying() 判断MediaPlayer是否正在播放
4、pause() 暂停播放
5、prepare() 准备播放,会使MediaPlayer进入Prepared状态
6、seekTo(int msec) 寻找指定的时间位置
7、getVideoHeight() 获取视频的高度
8、getVideoWidth() 获取视频的宽度
9、isLooping() 判断MediaPlayer是否正在循环播放
10、prepareAsync() 准备播放异步音频
11、release() 释放媒体资源
12、reset() 重置MediaPlayer进入未初始化状态
13、setAudioStreamType(int streamtype) 设置音频流的类型
14、setDataSource(String path) 指定装载path路径所代表的文件
15、setDataSource(Context context, Uri uri, Map<String, Stringheaders)指定装载uri所代表的文件 16、setDataSource(Context context, Uri uri)指定装载uri所代表的文件。
17、setDataSource(FileDescriptor fd, longoffset, long length)指定装载fd所代表的文件中从offset开始长度为length的文件内容。
18、setDataSource(FileDescriptor fd)指定装载fd所代表的文件。
Tip:执行上面的setDataSource()方法后,MediaPlayer并未真正去装载那些音频文件,还需要调用MediaPlayer的perpare()方法去准备音频,
所谓准备,就是让MediaPlayer真正去装载音频文件。
eg:mp.setDataSource(M/mnt/sdcard/next.mp3);
mp.prepare();//准备播放
mp.start(); //播放
如果MediaPlayer实列是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create()方法里已经调用过了。
19、setDisplay(SurfaceHolder sh) 设置显示方式
20、setLooping(boolean looping) 设置是否循环播放
21、setNextMediaPlayer(MediaPlayer next) 设置当前流媒体播放完毕,下一个播放的MediaPlayer
22、setScreenOnWhilePlaying(booleanscreenOn) 设置是否使用SurfaceHolder来显示
23、setSurface(Surface surface) 设置Surface
24、setVideoScalingMode(int mode)设置视屏缩放的模式
25、setVolume(float leftVolume,floatrightVolume)设置播放的音量
26、setWakeMode(Context context,int mode) 为MediaPlayer设置低级电源管理行为
27、start() 开始或恢复播放
28、stop()停止播放
29、seekTo()是定位方法,可以让播放器从指定的位置开始播放
1、setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenerlistener)
注册一个回调函数,在网络视频缓冲变化时调用
2、setOnCompletionListener(MediaPlayer.OnCompletionListener listener)
为MediaPlayer的播放完成事件绑定事件监听器
3、setOnErrorListener(MediaPlayer.OnErrorListenerlistener)
为MediaPlayer的播放错误事件绑定事件监听器
4、setOnPreparedListener(MediaPlayer.OnPreparedListenerlistener)
当MediaPlayer调用prepare()方法时触发该监听器
5、setOnSeekCompleteListener(MediaPlayer.onSeekCompleteListener listener)
当MediaPlayer调用seek()方法时触发该监听器
6、setOnVideoSizeChangedListener(MediaPlayer.OnVideoSizeChangedListener listener)
注册一个用于监听视频大小改变的监听器
代码部分:1、播放项目里的音乐
package com.autoseekbar;
importandroid.app.Activity;
importandroid.media.MediaPlayer;
importandroid.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
importandroid.os.SystemClock;
import android.view.View;
importandroid.widget.ImageButton;
importandroid.widget.SeekBar;
importandroid.widget.SeekBar.OnSeekBarChangeListener;
public class MainActivityextends Activity {
privateSeekBar seekBar;
privateMediaPlayer mp;
privateMyTherad myTherad;
privateImageButton imageButton;
privateboolean isPlaying = true;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar= (SeekBar) findViewById(R.id.seek_bar);
myTherad= new MyTherad();
seekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {
//停止拖动事件监听
@Override
publicvoid onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(seekBar.getProgress());
}
//开始拖动事件监听
@Override
publicvoid onStartTrackingTouch(SeekBar seekBar) {
}
//进度值改变事件监听
@Override
publicvoid onProgressChanged(SeekBar seekBar, int progress,
booleanfromUser) {
}
});
}
/**播放/暂停按钮 */
publicvoid player(View view) {
imageButton= (ImageButton) view;
if(mp == null){//如果mp==null,则说明音乐从未播放过
mp =MediaPlayer.create(this, R.raw.life);//播放项目中的音乐
inttime = mp.getDuration();//得到播放的时间长
seekBar.setMax(time);//将seekBar的长设成音乐的长度
mp.start();//播放音乐
imageButton.setImageResource(R.drawable.start);//将按钮图标变成音乐正在播放的图标
changeProgress();//同时改变进度条的位置
//当音乐播放完成时调用这个监听
mp.setOnCompletionListener(newOnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayer mp) {
seekBar.setProgress(0);//将进度条设成开始状态
mp.seekTo(0);
mp.start();//重新播放(循环)
myTherad= new MyTherad();
changeProgress();
}
});
}elseif(mp.isPlaying()){//音乐正在播放时
mp.pause();//暂停音乐
imageButton.setImageResource(R.drawable.start);
isPlaying= false;
myTherad= null;
}else{//音乐结束
myTherad= new MyTherad();
isPlaying= true;//将音乐设于可播放状态
mp.start();//继续播放
imageButton.setImageResource(R.drawable.stop);
changeProgress();
}
}
/**开启线程 */
publicvoid changeProgress(){
myTherad.start();
}
/** 用线程来控制seekBar的移动 */
classMyTherad extends Thread{
publicvoid run(){
while(true){
intcurrentPosition = mp.getCurrentPosition();//得到音乐播放的位置
seekBar.setProgress(currentPosition);//将seekBar设置到当前位置
if(seekBar.getProgress() == seekBar.getMax()){//当seekBar移动到进度条的最后面时停止移动
break;
}
if (!isPlaying) {//音乐停止播放seekbar也停止
break;
}
SystemClock.sleep(100);//100毫秒移动一下
}
}
}
@Override
protected void onDestroy() {//activity退出时释放音乐
mp.release();
mp.seekTo(0);
super.onDestroy();
}
}
2、播放内存卡的音乐
package com.autoseekbar;
importjava.io.IOException;
importandroid.app.Activity;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.media.MediaPlayer.OnBufferingUpdateListener;
importandroid.media.MediaPlayer.OnCompletionListener;
importandroid.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
importandroid.os.Environment;
importandroid.os.SystemClock;
import android.view.View;
importandroid.widget.ImageButton;
importandroid.widget.SeekBar;
importandroid.widget.SeekBar.OnSeekBarChangeListener;
public classSDCardActivity extends Activity {
privateSeekBar seekBar;
privateMediaPlayer mp;
privateMyTherad myTherad;
privateImageButton imageButton;
privateboolean isPlaying = true;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar= (SeekBar) findViewById(R.id.seek_bar);
myTherad= new MyTherad();
seekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {
@Override
publicvoid onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(seekBar.getProgress());
}
@Override
publicvoid onStartTrackingTouch(SeekBar seekBar) {
}
@Override
publicvoid onProgressChanged(SeekBar seekBar, int progress,
booleanfromUser) {
}
});
}
/**播放/暂停按钮*/
publicvoid player(View view) {
imageButton= (ImageButton) view;
if(mp== null){//如果mp==null,则说明音乐从未播放过
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
StringsdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
mp =new MediaPlayer();
try {
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(this,Uri.parse("file://"+sdcardPath+"/first.mp3"));
mp.prepare();
} catch(IllegalArgumentException e) {
e.printStackTrace();
} catch(SecurityException e) {
e.printStackTrace();
} catch(IllegalStateException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
inttime = mp.getDuration();
seekBar.setMax(time);
mp.start();
imageButton.setImageResource(R.drawable.stop);
changeProgress();
mp.setOnCompletionListener(newOnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayer mp) {
seekBar.setProgress(0);//将进度条设成开始状态
mp.seekTo(0);
mp.start();//重新播放(循环)
myTherad= new MyTherad();
changeProgress();
}
});
}elseif(mp.isPlaying()){//音乐正在播放时
mp.pause();//暂停音乐
imageButton.setImageResource(R.drawable.start);
isPlaying= false;
myTherad= null;
}else{//音乐结束
myTherad= new MyTherad();
isPlaying= true;//将音乐设于可播放状态
mp.start();//继续播放
imageButton.setImageResource(R.drawable.stop);
changeProgress();
}
}
/**开启线程*/
publicvoid changeProgress(){
myTherad.start();
}
/**用线程来控制seekBar的移动 */
classMyTherad extends Thread{
publicvoid run(){
while(true){
intcurrentPosition = mp.getCurrentPosition();//得到音乐播放的位置
seekBar.setProgress(currentPosition);//将seekBar设置到当前位置
if(seekBar.getProgress()== seekBar.getMax()){//当seekBar移动到进度条的最后面时停止移动
break;
}
if(!isPlaying) {//音乐停止播放seekbar也停止
break;
}
SystemClock.sleep(100);//100毫秒移动一下
}
}
}
}
3、播放联网音乐
package com.autoseekbar;
importjava.io.IOException;
importandroid.app.Activity;
importandroid.media.AudioManager;
importandroid.media.MediaPlayer;
importandroid.media.MediaPlayer.OnBufferingUpdateListener;
importandroid.media.MediaPlayer.OnCompletionListener;
importandroid.media.MediaPlayer.OnPreparedListener;
import android.net.Uri;
import android.os.Bundle;
importandroid.os.Environment;
importandroid.os.SystemClock;
import android.view.View;
importandroid.widget.ImageButton;
importandroid.widget.SeekBar;
importandroid.widget.SeekBar.OnSeekBarChangeListener;
/**
* 播放联网音乐
* @author rou
* @date 2016年3月24日
*/
public classIntentActivity extends Activity {
privateSeekBar seekBar;
privateMediaPlayer mp;
privateMyTherad myTherad;
privateImageButton imageButton;
privateboolean isPlaying = true;
@Override
protectedvoid onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
seekBar= (SeekBar) findViewById(R.id.seek_bar);
myTherad= new MyTherad();
seekBar.setOnSeekBarChangeListener(newOnSeekBarChangeListener() {
@Override
publicvoid onStopTrackingTouch(SeekBar seekBar) {
mp.seekTo(seekBar.getProgress());
}
@Override
publicvoid onStartTrackingTouch(SeekBar seekBar) {
}
@Override
publicvoid onProgressChanged(SeekBar seekBar, int progress,
booleanfromUser) {
}
});
}
/**播放/暂停按钮*/
publicvoid player(View view) {
imageButton= (ImageButton) view;
if(mp== null){//如果mp==null,则说明音乐从未播放过
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
StringsdcardPath = Environment.getExternalStorageDirectory().getAbsolutePath();
mp =new MediaPlayer();
try {
mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
mp.setDataSource(this,Uri.parse(""));
mp.prepareAsync();
} catch(IllegalArgumentException e) {
e.printStackTrace();
} catch(SecurityException e) {
e.printStackTrace();
} catch(IllegalStateException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
}
mp.setOnPreparedListener(newOnPreparedListener() {
@Override
publicvoid onPrepared(MediaPlayer mp) {
inttime = mp.getDuration();
seekBar.setMax(time);
mp.start();
imageButton.setImageResource(R.drawable.start);//将按钮图标变成音乐正在播放的图标
}
});
mp.setOnBufferingUpdateListener(newOnBufferingUpdateListener() {
@Override
publicvoid onBufferingUpdate(MediaPlayer mp, int percent) {
int buf = seekBar.getMax()/100*percent;
seekBar.setSecondaryProgress(buf);
}
});
mp.setOnCompletionListener(newOnCompletionListener() {
@Override
publicvoid onCompletion(MediaPlayer mp) {
seekBar.setProgress(0);//将进度条设成开始状态
mp.seekTo(0);
mp.start();//重新播放(循环)
myTherad= new MyTherad();
changeProgress();
}
});
}elseif(mp.isPlaying()){//音乐正在播放时
mp.pause();//暂停音乐
imageButton.setImageResource(R.drawable.start);
isPlaying= false;
myTherad= null;
}else{//音乐结束
myTherad= new MyTherad();
isPlaying= true;//将音乐设于可播放状态
mp.start();//继续播放
imageButton.setImageResource(R.drawable.stop);
changeProgress();
}
}
/**开启线程*/
publicvoid changeProgress(){
myTherad.start();
}
/**用线程来控制seekBar的移动 */
classMyTherad extends Thread{
publicvoid run(){
while(true){
intcurrentPosition = mp.getCurrentPosition();//得到音乐播放的位置
seekBar.setProgress(currentPosition);//将seekBar设置到当前位置
if(seekBar.getProgress()== seekBar.getMax()){//当seekBar移动到进度条的最后面时停止移动
break;
}
if(!isPlaying) {//音乐停止播放seekbar也停止
break;
}
SystemClock.sleep(100);//100毫秒移动一下
}
}
}
}
布局:
<RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="${relativePackage}.${activityClass}" >
<SeekBar
android:id="@+id/seek_bar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_centerInParent="true"
android:minHeight="5dip"
android:maxHeight="5dip"
android:secondaryProgress="50"
android:progressDrawable="@drawable/seek_img"
android:thumb="@drawable/thumb" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="player"/>
</RelativeLayout>