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();