MediaPlayer

方法:

装载音频文件:

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对象。

 

1getCurrentPosition()     获取当前播放位置                              

2getDuration()            获取音频的时常                               

3isPlaying()                                     判断MediaPlayer是否正在播放                                             

4pause()                                         暂停播放                                                                                     

5prepare()               准备播放,会使MediaPlayer进入Prepared状态     

6seekTo(int msec)        寻找指定的时间位置                            

7getVideoHeight()        获取视频的高度                                 

8getVideoWidth()         获取视频的宽度                                 

9isLooping()             判断MediaPlayer是否正在循环播放               

10prepareAsync()         准备播放异步音频                               

11release()              释放媒体资源                                  

12reset()                重置MediaPlayer进入未初始化状态                

13setAudioStreamType(int streamtype) 设置音频流的类型                   

14setDataSource(String path) 指定装载path路径所代表的文件               

15、setDataSource(Context context, Uri uri, Map<String, Stringheaders)指定装载uri所代表的文件   16、setDataSource(Context context, Uri uri)指定装载uri所代表的文件。       

17setDataSource(FileDescriptor fd, longoffset, long length)指定装载fd所代表的文件中从offset开始长度为length的文件内容。

18setDataSource(FileDescriptor fd)指定装载fd所代表的文件。

 

Tip:执行上面的setDataSource()方法后,MediaPlayer并未真正去装载那些音频文件,还需要调用MediaPlayerperpare()方法去准备音频,

      所谓准备,就是让MediaPlayer真正去装载音频文件。

       eg:mp.setDataSource(M/mnt/sdcard/next.mp3);

      mp.prepare();//准备播放

             mp.start();   //播放

如果MediaPlayer实列是由create方法创建的,那么第一次启动播放前不需要再调用prepare()了,因为create()方法里已经调用过了。

 

 

 

19setDisplay(SurfaceHolder sh)   设置显示方式

20setLooping(boolean looping)   设置是否循环播放

21setNextMediaPlayer(MediaPlayer next)    设置当前流媒体播放完毕,下一个播放的MediaPlayer

22setScreenOnWhilePlaying(booleanscreenOn) 设置是否使用SurfaceHolder来显示

23setSurface(Surface surface)  设置Surface

24setVideoScalingMode(int mode)设置视屏缩放的模式

25setVolume(float leftVolume,floatrightVolume)设置播放的音量

26setWakeMode(Context context,int mode) MediaPlayer设置低级电源管理行为

27start()  开始或恢复播放

28stop()停止播放

29seekTo()是定位方法,可以让播放器从指定的位置开始播放

 

1setOnBufferingUpdateListener(MediaPlayer.OnBufferingUpdateListenerlistener) 

        注册一个回调函数,在网络视频缓冲变化时调用

2setOnCompletionListener(MediaPlayer.OnCompletionListener listener)

   MediaPlayer的播放完成事件绑定事件监听器

3setOnErrorListener(MediaPlayer.OnErrorListenerlistener)

       MediaPlayer的播放错误事件绑定事件监听器

4setOnPreparedListener(MediaPlayer.OnPreparedListenerlistener)

     MediaPlayer调用prepare()方法时触发该监听器

5setOnSeekCompleteListener(MediaPlayer.onSeekCompleteListener listener)

  MediaPlayer调用seek()方法时触发该监听器

6setOnVideoSizeChangedListener(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>



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值