MediaPlayer 可以播放音频和视频,另外也可以通过VIDeoVIEw来播放视频,虽然VIDeoVIEw比MediaPlayer简单易用,但定制性不如用 MediaPlayer,要视情况选择了。MediaPlayer播放音频比较简单,但是要播放视频就需要SurfaceVIEw。 SurfaceVIEw比普通的自定义view更有绘图上的优势,它支持完全的OpenGL ES库。
main.xml:
<?xml version="1.0" enCoding="utf-8"?><linearLayout androID:ID="@+ID/linearLayout01" androID:layout_wIDth="fill_parent" androID:layout_height="fill_parent" xmlns:androID="http://schemas.androID.com/apk/res/androID" androID:orIEntation="vertical"> <Seekbar androID:ID="@+ID/Seekbar01" androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent"></Seekbar> <linearLayout androID:ID="@+ID/linearLayout02" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content"> <button androID:ID="@+ID/button01" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="播放音频"></button> <button androID:ID="@+ID/button02" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="停止播放"></button> </linearLayout> <Seekbar androID:ID="@+ID/Seekbar02" androID:layout_height="wrap_content" androID:layout_wIDth="fill_parent"></Seekbar> <SurfaceVIEw androID:ID="@+ID/SurfaceVIEw01" androID:layout_wIDth="fill_parent" androID:layout_height="250px"></SurfaceVIEw> <linearLayout androID:ID="@+ID/linearLayout02" androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content"> <button androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:ID="@+ID/button03" androID:text="播放视频"></button> <button androID:layout_wIDth="wrap_content" androID:layout_height="wrap_content" androID:text="停止播放" androID:ID="@+ID/button04"></button> </linearLayout></linearLayout>
TestMedia.java
package com.testMedia; import java.io.IOException; import java.util.Timer;import java.util.TimerTask;import androID.app.Activity; import androID.media.AudioManager;import androID.media.MediaPlayer;import androID.os.Bundle; import androID.vIEw.SurfaceHolder;import androID.vIEw.SurfaceVIEw;import androID.vIEw.VIEw; import androID.Widget.button; import androID.Widget.Seekbar;import androID.Widget.Toast; public class TestMedia extends Activity { /** Called when the activity is first created. */ private Seekbar skb_audio=null; private button btn_start_audio = null; private button btn_stop_audio = null; private Seekbar skb_vIDeo=null; private button btn_start_vIDeo = null; private button btn_stop_vIDeo = null; private SurfaceVIEw surfaceVIEw; private SurfaceHolder surfaceHolder; private MediaPlayer m = null; private Timer mTimer; private TimerTask mTimerTask; private boolean isChanging=false;//互斥变量,防止定时器与Seekbar拖动时进度冲突 @OverrIDe public voID onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentVIEw(R.layout.main); //----------Media控件设置---------// m=new MediaPlayer(); //播放结束之后d出提示 m.setonCompletionListener(new MediaPlayer.OnCompletionListener(){ @OverrIDe public voID onCompletion(MediaPlayer arg0) { Toast.makeText(testMedia.this, "结束", 1000).show(); m.release(); } }); //----------定时器记录播放进度---------// mTimer = new Timer(); mTimerTask = new TimerTask() { @OverrIDe public voID run() { if(isChanging==true) return; if(m.getVIDeoHeight()==0) skb_audio.setProgress(m.getCurrentposition()); else skb_vIDeo.setProgress(m.getCurrentposition()); } }; mTimer.schedule(mTimerTask, 0, 10); btn_start_audio = (button) this.findVIEwByID(R.ID.button01); btn_stop_audio = (button) this.findVIEwByID(R.ID.button02); btn_start_audio.setonClickListener(new ClickEvent()); btn_stop_audio.setonClickListener(new ClickEvent()); skb_audio=(Seekbar)this.findVIEwByID(R.ID.Seekbar01); skb_audio.setonSeekbarchangelistener(new SeekbarChangeEvent()); btn_start_vIDeo = (button) this.findVIEwByID(R.ID.button03); btn_stop_vIDeo = (button) this.findVIEwByID(R.ID.button04); btn_start_vIDeo.setonClickListener(new ClickEvent()); btn_stop_vIDeo.setonClickListener(new ClickEvent()); skb_vIDeo=(Seekbar)this.findVIEwByID(R.ID.Seekbar02); skb_vIDeo.setonSeekbarchangelistener(new SeekbarChangeEvent()); surfaceVIEw = (SurfaceVIEw) findVIEwByID(R.ID.SurfaceVIEw01); surfaceHolder = surfaceVIEw.getHolder(); surfaceHolder.setFixedSize(100, 100); surfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); } /** * 按键事件处理 */ class ClickEvent implements VIEw.OnClickListener{ @OverrIDe public voID onClick(VIEw v) { if(v==btn_start_audio) { m.reset();//恢复到未初始化的状态 m=MediaPlayer.create(testMedia.this, R.raw.big);//读取音频 skb_audio.setMax(m.getDuration());//设置Seekbar的长度 try { m.prepare(); //准备 } catch (IllegalStateException e) { // Todo auto-generated catch block e.printstacktrace(); } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); } m.start(); //播放 } else if(v==btn_stop_audio || v==btn_stop_vIDeo) { m.stop(); } else if(v==btn_start_vIDeo) { m.reset();//恢复到未初始化的状态 m=MediaPlayer.create(testMedia.this, R.raw.test);//读取视频 skb_vIDeo.setMax(m.getDuration());//设置Seekbar的长度 m.setAudioStreamType(AudioManager.STREAM_MUSIC); m.setdisplay(surfaceHolder);//设置屏幕 try { m.prepare(); } catch (IllegalArgumentException e) { // Todo auto-generated catch block e.printstacktrace(); } catch (IllegalStateException e) { // Todo auto-generated catch block e.printstacktrace(); } catch (IOException e) { // Todo auto-generated catch block e.printstacktrace(); } m.start(); } } } /** * Seekbar进度改变事件 */ class SeekbarChangeEvent implements Seekbar.OnSeekbarchangelistener{ @OverrIDe public voID onProgressChanged(Seekbar seekbar, int progress, boolean fromUser) { // Todo auto-generated method stub } @OverrIDe public voID onStartTrackingtouch(Seekbar seekbar) { isChanging=true; } @OverrIDe public voID onStopTrackingtouch(Seekbar seekbar) { m.seekTo(seekbar.getProgress()); isChanging=false; } } }总结
以上是内存溢出为你收集整理的Android初学者之MediaPlayer多媒体播放器全部内容,希望文章能够帮你解决Android初学者之MediaPlayer多媒体播放器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)