1.使用静态方法加载Resource资源

MediaPlayer.create(Context c,int resId);>MediaPlayer的一个对象

通过此方法调用的对象直接加载到MediaPlayer上去。所以此时只需要调用

该对象的start(),pause(),stop()即可。


MediaPlayer mediaPlayer=MediaPlayer.create(this,R.raw.song);
mediaPlayer.start();


2.播放原始资源

//加载资源

调用Context.getAsset();>AssetManager;

调用AssetManager.openFd(String path);>AssetFileDscriptor;

调用AssetFileDscriptor的getFileDescriptor(),getStartOffset(),getLength()获取音频文件信息

//设置源

创建MediaPlayer对象,并调用该对象的setDataSource(FileDescriptor fd,long offset,long length);

//通过setDataSource加载的资源实际上并没有真正加载,需要调用此方法实现。

调用MediaPlayer对象的prepare();

播放等操作调用该对象的start(),pause(),stop()即可。


AssetManager assetManager=this.getAssets();
AssetFileDescriptor fd=assetManager.openFd(song);
MediaPlayer mediaPlayer=new MediaPlayer();
mediaPlayer.setDataSource(fd.getFileDescriptor(),
                fd.getStartOffset(),fd.getLength());
mediaPlayer.prepare();
mediaPlayer.start();


3.播放外部存储器上的音频/网络

创建MediaPalyer并调用该对象的setDataSource(String path)指定路径

调用MediaPlayer对象的prepare()准备音频;

播放等操作调用该对象的start(),pause(),stop()即可。


MediaPlayer mediaPlayer=new MediaPlayer();
//SDcard            mediaPlayer.setDataSource("/mnt/sdcard/song.mp3");
//netResource
mediaPlayer.setDataSource(this,Uri.parse("uriPath"));
mediaPlayer.prepare();
mediaPlayer.start();


4.与SurfaceView的应用

创建SurfaceView

surfaceView=(SurfaceView) findViewById(R.id.surface);       surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
surfaceView.getHolder().setKeepScreenOn(true);
surfaceView.getHolder().addCallback(new SurfaceListener());

创建MediaPlayer

mediaPlayer=new MediaPlayer();

mediaPlayer.reset();            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);          mediaPlayer.setDataSource("/mnt/sdcard/[容祖儿]别说爱我.3gp");         mediaPlayer.setDisplay(surfaceView.getHolder());//设置输出
mediaPlayer.prepare();
mediaPlayer.start();