测试片

来源:互联网 发布:键盘哪个牌子好 知乎 编辑:程序博客网 时间:2024/04/26 22:20

视频列表:

package com.multimedia.video;    import java.util.ArrayList;  import java.util.HashMap;  import java.util.List;  import java.util.Map;    import com.multimedia.entity.R;    import android.app.ListActivity;  import android.content.Context;  import android.content.Intent;  import android.database.Cursor;  import android.net.Uri;  import android.os.Bundle;  import android.os.Environment;  import android.provider.MediaStore;  import android.util.Log;  import android.view.LayoutInflater;  import android.view.Menu;  import android.view.MenuItem;  import android.view.View;  import android.view.ViewGroup;  import android.widget.ArrayAdapter;  import android.widget.BaseAdapter;  import android.widget.ListView;  import android.widget.SimpleAdapter;  import android.widget.TextView;  import android.widget.Toast;    /**   * 播放列表界面   * @author Andy   *   */  public class VideoListActivity extends ListActivity {          private int index=0;      private Cursor cursor=null;      private List<String> videoMsg=new ArrayList<String>();      private ArrayList<Map<String,Object>> videoData= new ArrayList<Map<String,Object>>();;            @Override      protected void onCreate(Bundle savedInstanceState) {                    super.onCreate(savedInstanceState);                    boolean able=Environment.getExternalStorageState().equals(                   Environment.MEDIA_MOUNTED);          if(able)          getAllvideoMsg();          else          Toast.makeText(this, "sd card is unable", Toast.LENGTH_SHORT).show();            }      /**       * 获取本地视频信息       */      private void getAllvideoMsg(){          Uri Media_URL = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;          cursor = this.getContentResolver().query(Media_URL, VideoData.listMsg, "duration>5000", null, null);                    int len=cursor.getCount();          while(index<len){                            String info = getInfoByPosition(cursor, index);              videoMsg.add(info);//Log.e("msg", ""+VideoData.mCursorCols[index]);              index++;          }                    for(int i =0; i < len; i++) {              Map<String,Object> item = new HashMap<String,Object>();              item.put("image", R.drawable.vp);              item.put("title", videoMsg.get(i));          //    item.put("text", mListStr[i]);              videoData.add(item);           }          SimpleAdapter adapter = new SimpleAdapter(this,videoData,R.layout.videolist,                  new String[]{"image","title"},new int[]{R.id.videoimage,R.id.videotitle});                setListAdapter(adapter);                }                @Override      protected void onListItemClick(ListView l, View v, int position, long id) {                    Intent intent=new Intent(this,VideoActivity.class);          Bundle data=new Bundle();          data.putInt("video_index", position);          intent.putExtra("video_bundle", data);          startActivity(intent);          super.onListItemClick(l, v, position, id);      }        private String getInfoByPosition(Cursor c,int position){          c.moveToPosition(position);          int videoTitle= c.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME);            int videoSize=c.getColumnIndex(MediaStore.Video.Media.SIZE);          int sizes=Integer.parseInt(c.getString(videoSize))/1024/1024;          int TotalTime=c.getColumnIndex(MediaStore.Video.Media.DURATION);          int time=Integer.parseInt(c.getString(TotalTime));          int min=time/1000/60;          int sec=time/1000%60;                    String info =c.getString(videoTitle)+'\n'+sizes+"MB"+"  "+min+"'"+sec;          return info;                }            @Override      public boolean onCreateOptionsMenu(Menu menu) {          menu.add(0, Menu.FIRST, 0, "选择其他播放器");          menu.add(0, Menu.FIRST+1, 0, "播放设置");          return super.onCreateOptionsMenu(menu);      }        @Override      public boolean onOptionsItemSelected(MenuItem item) {          if(item.getItemId()==1){              Intent intent=new Intent(Intent.ACTION_VIEW);                intent.setType("video/*");                startActivity(Intent.createChooser(intent, getTitle()));           }          else if(item.getItemId()==2){              this.startActivity(new Intent(this,SetActivity.class));          }          return super.onOptionsItemSelected(item);      }            @Override      protected void onDestroy() {          if(cursor!=null){              cursor.close();              cursor=null;          }          super.onDestroy();      }        }  

过滤信息选择

package com.multimedia.video;    import android.provider.MediaStore;    public class VideoData {        /**       * 选择性的返回列表信息       */      final static String[] listMsg = new String[] {          //  "video._id AS _id", // index must match IDCOLIDX below                MediaStore.Video.Media.DISPLAY_NAME, MediaStore.Video.Media.SIZE,              MediaStore.Video.Media.DURATION      };            final static String[] showMsg = new String[] {          //  "video._id AS _id", // index must match IDCOLIDX below          MediaStore.Video.Media.DATA,          MediaStore.Video.Media.DISPLAY_NAME                    };             static int index=0;         }  


播放界面

package com.multimedia.video;    import com.multimedia.entity.R;  import com.multimedia.entity.R.id;  import com.multimedia.entity.R.layout;    import android.app.Activity;  import android.content.Intent;  import android.content.pm.ActivityInfo;  import android.content.res.Configuration;  import android.database.Cursor;  import android.graphics.Rect;  import android.net.Uri;  import android.os.Bundle;  import android.provider.MediaStore;  import android.util.Log;  import android.view.MotionEvent;  import android.view.SurfaceView;  import android.view.View;  import android.view.Window;  import android.view.WindowManager;  import android.widget.Button;  import android.widget.SeekBar;    public class VideoActivity extends Activity {              @Override      protected void onNewIntent(Intent intent) {Log.e("msg", "newintent");          /*Uri uri=intent.getData();          cursor = this.getContentResolver().query(uri, VideoData.showMsg, "duration>2000", null, null);          super.onNewIntent(intent);*/      }        private SurfaceView sfv;      private SeekBar seekbar;      private Button btstart,btstop,btnext,btprev,btpause,btresume;//      private VideoPlayer myvideo;      //控件是否可见       boolean cansee=true;       Cursor cursor=null;       int current_index=0;            @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);          /*getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,                  WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);*/          setRequestedOrientation( ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);          setContentView(R.layout.videoplayer);            getview();                    Bundle b=getIntent().getBundleExtra("video_bundle");          if(b!=null){          Uri Media_URL = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;          cursor = this.getContentResolver().query(Media_URL, VideoData.showMsg, "duration>5000", null, null);          current_index=b.getInt("video_index");          }else{              String addres=getIntent().getData().toString();              Uri uri=Uri.parse(addres.substring(addres.indexOf("/sdcard"), addres.length()));Log.e("msg", "uri="+uri);              cursor = this.getContentResolver().query(uri, VideoData.showMsg, "duration>2000", null, null);          }        }      /**       * 获取控件对象       */      private void getview(){                    ClickMonitor cliM=new ClickMonitor();          sfv=(SurfaceView)findViewById(R.id.surfaceView1);          seekbar=(SeekBar)findViewById(R.id.seekbar);                    btprev=(Button)findViewById(R.id.btnPrev);          btprev.setOnClickListener(cliM);          btstart=(Button)findViewById(R.id.btnPlay);          btstart.setOnClickListener(cliM);          btstart.setVisibility(View.GONE);          btpause=(Button)findViewById(R.id.btnPause);      //  btpause.setVisibility(View.GONE);          btpause.setOnClickListener(cliM);          btresume=(Button)findViewById(R.id.btnResume);          btresume.setVisibility(View.GONE);          btresume.setOnClickListener(cliM);          btstop=(Button)findViewById(R.id.btnStop);          btstop.setOnClickListener(cliM);          btnext=(Button)findViewById(R.id.btnNext);          btnext.setOnClickListener(cliM);                    myvideo=new VideoPlayer(getApplicationContext(), sfv,seekbar,this);          seekbar.setOnSeekBarChangeListener(new SeekBarMonitor());      }      /**       * 设置控件可见度       * @param view       */      void setVisibleWidget(int view){          if(view==View.GONE){              seekbar.setVisibility(view);              btnext.setVisibility(view);              btprev.setVisibility(view);              btpause.setVisibility(view);              btresume.setVisibility(view);              btstart.setVisibility(view);              btstop.setVisibility(view);          }          else{              if(myvideo.isPlaying()){                  seekbar.setVisibility(view);                  btnext.setVisibility(view);                  btpause.setVisibility(view);//pause enable                  btprev.setVisibility(view);                  btstop.setVisibility(view);              }else if(true==myvideo.hasstop){                  seekbar.setVisibility(view);                  btnext.setVisibility(view);                  btprev.setVisibility(view);                  btstart.setVisibility(view);//start enable                  btstop.setVisibility(view);              }else if(false==myvideo.hasstop){                  seekbar.setVisibility(view);                  btnext.setVisibility(view);                  btprev.setVisibility(view);                  btresume.setVisibility(view);//resume enable                  btstop.setVisibility(view);              }          }      }            @Override      protected void onStart() {Log.e("msg", "onstart");                    super.onStart();      }        @Override      protected void onPause() {                    super.onPause();      }        @Override      protected void onResume() {                    super.onResume();      }        @Override      protected void onStop() {                    super.onStop();      }        @Override      protected void onDestroy() {          myvideo.destroy();          super.onDestroy();      }        void contrlVisible(){          if(cansee)              setVisibleWidget(View.VISIBLE);          else              setVisibleWidget(View.GONE);                    }      @Override      public boolean onTouchEvent(MotionEvent event) {                    int action =event.getAction();                    switch(action){          case MotionEvent.ACTION_DOWN:              cansee=!cansee;              contrlVisible();          break;                    case MotionEvent.ACTION_MOVE:                                       break;                        case MotionEvent.ACTION_UP:                                         break;          }          return super.onTouchEvent(event);      }        class ClickMonitor implements View.OnClickListener{            @Override          public void onClick(View v) {              if(v==btstart){                  myvideo.startPlay();                  btstart.setVisibility(View.GONE);                  btpause.setVisibility(View.VISIBLE);                  btresume.setVisibility(View.GONE);                                }              else if(v==btpause){                  myvideo.pause();                  btstart.setVisibility(View.GONE);                  btpause.setVisibility(View.GONE);                  btresume.setVisibility(View.VISIBLE);              }              else if(v==btstop){                  myvideo.stop();                  btstart.setVisibility(View.VISIBLE);                  btpause.setVisibility(View.GONE);                  btresume.setVisibility(View.GONE);              }              else if(v==btresume){                  myvideo.resume();                  btstart.setVisibility(View.GONE);                  btpause.setVisibility(View.VISIBLE);                  btresume.setVisibility(View.GONE);              }              else if(v==btnext){                  myvideo.next();                  btstart.setVisibility(View.GONE);                  btpause.setVisibility(View.VISIBLE);                  btresume.setVisibility(View.GONE);              }              else if(v==btprev){                  myvideo.previous();                  btstart.setVisibility(View.GONE);                  btpause.setVisibility(View.VISIBLE);                  btresume.setVisibility(View.GONE);              }          }      }            @Override      public void onConfigurationChanged(Configuration newConfig) {      //  int type = this.getResources().getConfiguration().orientation;                              if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {                    //切换到了横屏                } else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {                   //切换到了竖屏                }              super.onConfigurationChanged(newConfig);      }        class SeekBarMonitor implements SeekBar.OnSeekBarChangeListener{            int currentpos;          @Override          public void onProgressChanged(SeekBar seekBar, int progress,                  boolean fromUser) {                            currentpos=progress * myvideo.myplayer.getDuration() / seekBar.getMax();            }            @Override          public void onStartTrackingTouch(SeekBar seekBar) {                                      }            @Override          public void onStopTrackingTouch(SeekBar seekBar) {              myvideo.myplayer.seekTo(currentpos);          }                }    }  


播放控制

package com.multimedia.video;    import java.io.IOException;  import java.util.Timer;  import java.util.TimerTask;    import android.content.Context;  import android.database.Cursor;  import android.media.AudioManager;  import android.media.MediaPlayer;  import android.media.MediaPlayer.OnBufferingUpdateListener;  import android.media.MediaPlayer.OnCompletionListener;  import android.media.MediaPlayer.OnErrorListener;  import android.net.Uri;  import android.os.Handler;  import android.os.Message;  import android.os.PowerManager;  import android.provider.MediaStore;  import android.util.AttributeSet;  import android.util.Log;  import android.view.SurfaceHolder;  import android.view.SurfaceHolder.Callback;  import android.view.SurfaceView;  import android.view.View;  import android.widget.SeekBar;  import android.widget.Toast;  import android.widget.VideoView;    public class VideoPlayer implements OnBufferingUpdateListener,          OnCompletionListener, MediaPlayer.OnPreparedListener,          Callback,OnErrorListener{        public static final int UPDATE=1;      public static final int VISIBLE=2;      private int video_w,video_h;      private SurfaceHolder sfh;      private SurfaceView sfv;      protected MediaPlayer myplayer;      private SeekBar seekbar;      private Timer timer=new Timer();      private MyTask task;      private boolean desroyed=false;//canvas desroy      private Context mcontext;      private VideoActivity vida;      //控制可见性,      public boolean hasstop=false,pausing=false;      private int count=0;      private int current_pos,total_time ;        public VideoPlayer(Context mcontext,SurfaceView sfv,SeekBar seekbar,VideoActivity vida){                    this.mcontext=mcontext;          this.vida=vida;          this.sfv=sfv;          this.seekbar=seekbar;          this.sfv.setFocusable(true);          sfh=this.sfv.getHolder();          sfh.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);          sfh.setKeepScreenOn(true);          sfh.addCallback(this);          task=new MyTask();          timer.schedule(task, 0, 1000);          myplayer = new MediaPlayer();                }            Handler handler = new Handler() {          public void handleMessage(Message msg) {                switch (msg.what) {              case VISIBLE:                  vida.cansee=false;                  vida.contrlVisible();                  break;                case UPDATE:                  current_pos = myplayer.getCurrentPosition();                  total_time = myplayer.getDuration();                  if (total_time > 0) {                      int pos = seekbar.getMax() * current_pos / total_time;                      seekbar.setProgress(pos);                  }                  break;              }                        };      };            @Override      public void surfaceCreated(SurfaceHolder holder) {                    playStart();                      Log.e("msg", "surfaceCreated");      }        @Override      public void surfaceChanged(SurfaceHolder holder, int format, int width,              int height) {                    Log.e("msg", "surfaceChanged");      }        @Override      public void surfaceDestroyed(SurfaceHolder holder) {                    desroyed=true;          if(myplayer!=null&&myplayer.isPlaying()){              myplayer.stop();          }          Log.e("msg", "surfaceDestroyed");      }            private void playStart(){                    String path=getDateByPosition(vida.cursor, vida.current_index);          Toast.makeText(mcontext, getInfoByPosition(vida.cursor, vida.current_index), Toast.LENGTH_SHORT).show();              try {                  hasstop=false;                  seekbar.setEnabled(true);                  myplayer.reset();                  myplayer.setDataSource(path);                  myplayer.setScreenOnWhilePlaying(true);                  myplayer.setDisplay(sfh);                  myplayer.setAudioStreamType(AudioManager.STREAM_MUSIC);                  myplayer.setWakeMode(mcontext, PowerManager.PARTIAL_WAKE_LOCK);                  myplayer.setOnPreparedListener(this);                  myplayer.setOnCompletionListener(this);                  myplayer.setOnBufferingUpdateListener(this);                  myplayer.setOnErrorListener(this);                                    myplayer.prepare();              } catch (IllegalArgumentException e) {                  e.printStackTrace();              } catch (SecurityException e) {                  e.printStackTrace();              } catch (IllegalStateException e) {                  e.printStackTrace();              } catch (IOException e) {                  e.printStackTrace();              }                }            public void startPlay(){          playStart();          myplayer.start();                }      public void resume(){          if(!myplayer.isPlaying()){              pausing=false;              myplayer.start();              if(desroyed){                  desroyed=false;                  myplayer.seekTo(current_pos);              }          }      }            public void pause(){          if(myplayer.isPlaying()){              pausing=true;              myplayer.pause();          }      }            public void stop(){          current_pos=0;total_time=0;          if (myplayer != null) {               pausing=true;              hasstop=true;              myplayer.stop();              seekbar.setProgress(0);              seekbar.setEnabled(false);          }       }            public void setLooop(boolean loop){          myplayer.setLooping(loop);      }            public boolean isPlaying(){          return myplayer.isPlaying();      }            public void previous() {              if (vida.current_index == 0) {                  vida.current_index = vida.cursor.getCount() - 1;              } else {                  vida.current_index--;              }              current_pos=0;total_time=0;              pausing=false;              playStart();          }            public void next() {              if (vida.current_index == vida.cursor.getCount() - 1) {                  vida.current_index = 0;              } else {                  vida.current_index++;              }              current_pos=0;total_time=0;              pausing=false;              playStart();          }                 private String getDateByPosition(Cursor c,int position){          c.moveToPosition(position);          int dataColumn = c.getColumnIndex(MediaStore.Video.Media.DATA);               String data = c.getString(dataColumn);          return data;      }            private String getInfoByPosition(Cursor c,int position){          c.moveToPosition(position);          int videoTitle= c.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME);            String info =c.getString(videoTitle);          return info;                }            public void destroy(){          if(myplayer!=null){              myplayer.stop();              myplayer.release();               myplayer = null;           }          if(vida.cursor!=null){              vida.cursor.close();              vida.cursor=null;          }          if(timer!=null){              timer.cancel();              task.cancel();              timer=null;              task=null;          }      }            public void controlVolume(){          AudioManager amg=(AudioManager)this.mcontext.getSystemService(Context.AUDIO_SERVICE);          float current_volume=amg.getStreamVolume(AudioManager.STREAM_MUSIC);          float max_volume=amg.getStreamMaxVolume(AudioManager.STREAM_MUSIC);          float volume=current_volume/max_volume;                    myplayer.setVolume(volume, volume);      }                  private class MyTask extends TimerTask{            @Override          public void run() {              if(myplayer==null)                  return;              if(myplayer.isPlaying()&&seekbar.isPressed()==false){                  Message msg=Message.obtain();                  msg.what=UPDATE;                  handler.sendMessage(msg);              }              if(vida.cansee){                  count++;                  if(count%5==0){                      count=0;                      Message msg=Message.obtain();                      msg.what=VISIBLE;                      handler.sendMessage(msg);                  }              }          }      }            @Override      public void onPrepared(MediaPlayer mp) {          video_w=myplayer.getVideoWidth();          video_h=myplayer.getVideoHeight();                    if(video_w!=0&&video_h!=0){              if(!pausing){                  sfh.setFixedSize(video_w,video_h);                  myplayer.start();              if(current_pos>0)                  myplayer.seekTo(current_pos);              }          }            Log.e("msg", "prepare");      }        @Override      public void onCompletion(MediaPlayer mp) {          if(myplayer.isLooping())              playStart();          else              next();          Log.e("msg", "complete");      }        @Override      public void onBufferingUpdate(MediaPlayer mp, int percent) {          seekbar.setSecondaryProgress(percent);          Log.e("msg", "buffer");      }        @Override      public boolean onError(MediaPlayer mp, int arg1, int arg2) {          destroy();          return false;      }      }  


 

原创粉丝点击