使用VideoView和MediaController进行视频播放

一个视频播放的activity,可以直接拿过来用,比较简单,直接贴个代码留作记录,效果如下:



  1. /** 
  2.  * 视频播放的activity<br> 
  3.  * 使用方法:<br> 
  4.  * 1、AndroidManifest.xml中添加此activity<br> 
  5.  * 2、Intent中存入待播放视频的URL,支持本地和网络<br> 
  6.  * 3、启动这个activity<br> 
  7.  * <br> 
  8.  * example:<br> 
  9.  * String url = “play url”;<br> 
  10.  * Intent intent = new Intent();<br> 
  11.  * intent.setClass(this, VideoPlayActivity.class);<br> 
  12.  * intent.putExtra(VideoPlayActivity.KEY_URL, url);<br> 
  13.  * startActivity(intent);<br> 
  14.  *  
  15.  * @author ttworking 
  16.  *  
  17.  */  
  18. public class VideoPlayActivity extends Activity implements OnPreparedListener, OnErrorListener {  
  19.     public static final String KEY_URL = “view_url”;  
  20.   
  21.     private static final String TAG = “VideoPlayActivity”;  
  22.     private static final int PLAY_RETURN = 2 * 1000// 2 seconds  
  23.     private static final String KEY_PLAY_POSITON = “paly_position”;  
  24.     private static final String TOAST_ERROR_URL = “Paly url is null, please check parameter:” + KEY_URL;  
  25.     private static final String TOAST_ERROR_PLAY = “Paly error, please check url exist!”;  
  26.     private static final String DIALOG_TITILE = “奋力加载中,请稍后…”;  
  27.   
  28.     private static String url;  
  29.   
  30.     private ProgressDialog progressDialog;  
  31.     private MediaController mc;  
  32.     private VideoView videoView;  
  33.     private LinearLayout llMain;  
  34.     private LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);  
  35.   
  36.     @Override  
  37.     protected void onCreate(Bundle savedInstanceState) {  
  38.         super.onCreate(savedInstanceState);  
  39.   
  40.         url = getIntent().getStringExtra(KEY_URL);  
  41.         if (url == null && savedInstanceState != null) {  
  42.             url = savedInstanceState.getString(KEY_URL);  
  43.         }  
  44.   
  45.         if (url == null) {  
  46.             Toast.makeText(getApplicationContext(), TOAST_ERROR_URL, Toast.LENGTH_LONG).show();  
  47.             finish();  
  48.             return;  
  49.         }  
  50.   
  51.         setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);  
  52.   
  53.         videoView = new VideoView(this);  
  54.         videoView.setVideoURI(Uri.parse(url));  
  55.         videoView.requestFocus();  
  56.         videoView.setOnPreparedListener(this);  
  57.         videoView.setOnErrorListener(this);  
  58.   
  59.         mc = new MediaController(this);  
  60.         mc.setAnchorView(videoView);  
  61.         mc.setKeepScreenOn(true);  
  62.   
  63.         videoView.setMediaController(mc);  
  64.   
  65.         llMain = new LinearLayout(this);  
  66.         llMain.setGravity(Gravity.CENTER_VERTICAL);  
  67.         llMain.setOrientation(LinearLayout.VERTICAL);  
  68.         llMain.setLayoutParams(params);  
  69.   
  70.         llMain.addView(videoView, params);  
  71.         setContentView(llMain);  
  72.   
  73.         initDialog();  
  74.     }  
  75.   
  76.     @Override  
  77.     protected void onSaveInstanceState(Bundle outState) {  
  78.         super.onSaveInstanceState(outState);  
  79.   
  80.         int palyPosition = videoView.getCurrentPosition();  
  81.         if (palyPosition > PLAY_RETURN) {  
  82.             palyPosition -= PLAY_RETURN;  
  83.         }  
  84.         outState.putInt(KEY_PLAY_POSITON, palyPosition);  
  85.         outState.putString(KEY_URL, url);  
  86.     }  
  87.   
  88.     @Override  
  89.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  90.         super.onRestoreInstanceState(savedInstanceState);  
  91.   
  92.         videoView.seekTo(savedInstanceState.getInt(KEY_PLAY_POSITON));  
  93.     }  
  94.   
  95.     @Override  
  96.     public void onPrepared(MediaPlayer mp) {  
  97.         progressDialog.cancel();  
  98.   
  99.         videoView.start();  
  100.     }  
  101.   
  102.     @Override  
  103.     public boolean onError(MediaPlayer mp, int what, int extra) {  
  104.         Log.d(TAG, ”onError:” + url);  
  105.   
  106.         Toast.makeText(getApplicationContext(), TOAST_ERROR_PLAY + ”\n” + url, Toast.LENGTH_LONG).show();  
  107.         progressDialog.cancel();  
  108.         finish();  
  109.   
  110.         return true;  
  111.     }  
  112.   
  113.     private void initDialog() {  
  114.         progressDialog = new ProgressDialog(this);  
  115.         progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
  116.         progressDialog.setMessage(DIALOG_TITILE);  
  117.         progressDialog.setCancelable(false);  
  118.         progressDialog.show();  
  119.     }  
  120. }  
/**
 * 视频播放的activity<br>
 * 使用方法:<br>
 * 1、AndroidManifest.xml中添加此activity<br>
 * 2、Intent中存入待播放视频的URL,支持本地和网络<br>
 * 3、启动这个activity<br>
 * <br>
 * example:<br>
 * String url = "play url";<br>
 * Intent intent = new Intent();<br>
 * intent.setClass(this, VideoPlayActivity.class);<br>
 * intent.putExtra(VideoPlayActivity.KEY_URL, url);<br>
 * startActivity(intent);<br>
 * 
 * @author ttworking
 * 
 */
public class VideoPlayActivity extends Activity implements OnPreparedListener, OnErrorListener {
    public static final String KEY_URL = "view_url";

    private static final String TAG = "VideoPlayActivity";
    private static final int PLAY_RETURN = 2 * 1000; // 2 seconds
    private static final String KEY_PLAY_POSITON = "paly_position";
    private static final String TOAST_ERROR_URL = "Paly url is null, please check parameter:" + KEY_URL;
    private static final String TOAST_ERROR_PLAY = "Paly error, please check url exist!";
    private static final String DIALOG_TITILE = "奋力加载中,请稍后...";

    private static String url;

    private ProgressDialog progressDialog;
    private MediaController mc;
    private VideoView videoView;
    private LinearLayout llMain;
    private LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        url = getIntent().getStringExtra(KEY_URL);
        if (url == null && savedInstanceState != null) {
            url = savedInstanceState.getString(KEY_URL);
        }

        if (url == null) {
            Toast.makeText(getApplicationContext(), TOAST_ERROR_URL, Toast.LENGTH_LONG).show();
            finish();
            return;
        }

        setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);

        videoView = new VideoView(this);
        videoView.setVideoURI(Uri.parse(url));
        videoView.requestFocus();
        videoView.setOnPreparedListener(this);
        videoView.setOnErrorListener(this);

        mc = new MediaController(this);
        mc.setAnchorView(videoView);
        mc.setKeepScreenOn(true);

        videoView.setMediaController(mc);

        llMain = new LinearLayout(this);
        llMain.setGravity(Gravity.CENTER_VERTICAL);
        llMain.setOrientation(LinearLayout.VERTICAL);
        llMain.setLayoutParams(params);

        llMain.addView(videoView, params);
        setContentView(llMain);

        initDialog();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        int palyPosition = videoView.getCurrentPosition();
        if (palyPosition > PLAY_RETURN) {
            palyPosition -= PLAY_RETURN;
        }
        outState.putInt(KEY_PLAY_POSITON, palyPosition);
        outState.putString(KEY_URL, url);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        videoView.seekTo(savedInstanceState.getInt(KEY_PLAY_POSITON));
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        progressDialog.cancel();

        videoView.start();
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.d(TAG, "onError:" + url);

        Toast.makeText(getApplicationContext(), TOAST_ERROR_PLAY + "\n" + url, Toast.LENGTH_LONG).show();
        progressDialog.cancel();
        finish();

        return true;
    }

    private void initDialog() {
        progressDialog = new ProgressDialog(this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage(DIALOG_TITILE);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }
}



from:http://blog.csdn.net/ttdevs/article/details/16863511

一个视频播放的activity,可以直接拿过来用,比较简单,直接贴个代码留作记录,效果如下:



  1. /** 
  2.  * 视频播放的activity<br> 
  3.  * 使用方法:<br> 
  4.  * 1、AndroidManifest.xml中添加此activity<br> 
  5.  * 2、Intent中存入待播放视频的URL,支持本地和网络<br> 
  6.  * 3、启动这个activity<br> 
  7.  * <br> 
  8.  * example:<br> 
  9.  * String url = “play url”;<br> 
  10.  * Intent intent = new Intent();<br> 
  11.  * intent.setClass(this, VideoPlayActivity.class);<br> 
  12.  * intent.putExtra(VideoPlayActivity.KEY_URL, url);<br> 
  13.  * startActivity(intent);<br> 
  14.  *  
  15.  * @author ttworking 
  16.  *  
  17.  */  
  18. public class VideoPlayActivity extends Activity implements OnPreparedListener, OnErrorListener {  
  19.     public static final String KEY_URL = “view_url”;  
  20.   
  21.     private static final String TAG = “VideoPlayActivity”;  
  22.     private static final int PLAY_RETURN = 2 * 1000// 2 seconds  
  23.     private static final String KEY_PLAY_POSITON = “paly_position”;  
  24.     private static final String TOAST_ERROR_URL = “Paly url is null, please check parameter:” + KEY_URL;  
  25.     private static final String TOAST_ERROR_PLAY = “Paly error, please check url exist!”;  
  26.     private static final String DIALOG_TITILE = “奋力加载中,请稍后…”;  
  27.   
  28.     private static String url;  
  29.   
  30.     private ProgressDialog progressDialog;  
  31.     private MediaController mc;  
  32.     private VideoView videoView;  
  33.     private LinearLayout llMain;  
  34.     private LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);  
  35.   
  36.     @Override  
  37.     protected void onCreate(Bundle savedInstanceState) {  
  38.         super.onCreate(savedInstanceState);  
  39.   
  40.         url = getIntent().getStringExtra(KEY_URL);  
  41.         if (url == null && savedInstanceState != null) {  
  42.             url = savedInstanceState.getString(KEY_URL);  
  43.         }  
  44.   
  45.         if (url == null) {  
  46.             Toast.makeText(getApplicationContext(), TOAST_ERROR_URL, Toast.LENGTH_LONG).show();  
  47.             finish();  
  48.             return;  
  49.         }  
  50.   
  51.         setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);  
  52.   
  53.         videoView = new VideoView(this);  
  54.         videoView.setVideoURI(Uri.parse(url));  
  55.         videoView.requestFocus();  
  56.         videoView.setOnPreparedListener(this);  
  57.         videoView.setOnErrorListener(this);  
  58.   
  59.         mc = new MediaController(this);  
  60.         mc.setAnchorView(videoView);  
  61.         mc.setKeepScreenOn(true);  
  62.   
  63.         videoView.setMediaController(mc);  
  64.   
  65.         llMain = new LinearLayout(this);  
  66.         llMain.setGravity(Gravity.CENTER_VERTICAL);  
  67.         llMain.setOrientation(LinearLayout.VERTICAL);  
  68.         llMain.setLayoutParams(params);  
  69.   
  70.         llMain.addView(videoView, params);  
  71.         setContentView(llMain);  
  72.   
  73.         initDialog();  
  74.     }  
  75.   
  76.     @Override  
  77.     protected void onSaveInstanceState(Bundle outState) {  
  78.         super.onSaveInstanceState(outState);  
  79.   
  80.         int palyPosition = videoView.getCurrentPosition();  
  81.         if (palyPosition > PLAY_RETURN) {  
  82.             palyPosition -= PLAY_RETURN;  
  83.         }  
  84.         outState.putInt(KEY_PLAY_POSITON, palyPosition);  
  85.         outState.putString(KEY_URL, url);  
  86.     }  
  87.   
  88.     @Override  
  89.     protected void onRestoreInstanceState(Bundle savedInstanceState) {  
  90.         super.onRestoreInstanceState(savedInstanceState);  
  91.   
  92.         videoView.seekTo(savedInstanceState.getInt(KEY_PLAY_POSITON));  
  93.     }  
  94.   
  95.     @Override  
  96.     public void onPrepared(MediaPlayer mp) {  
  97.         progressDialog.cancel();  
  98.   
  99.         videoView.start();  
  100.     }  
  101.   
  102.     @Override  
  103.     public boolean onError(MediaPlayer mp, int what, int extra) {  
  104.         Log.d(TAG, ”onError:” + url);  
  105.   
  106.         Toast.makeText(getApplicationContext(), TOAST_ERROR_PLAY + ”\n” + url, Toast.LENGTH_LONG).show();  
  107.         progressDialog.cancel();  
  108.         finish();  
  109.   
  110.         return true;  
  111.     }  
  112.   
  113.     private void initDialog() {  
  114.         progressDialog = new ProgressDialog(this);  
  115.         progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);  
  116.         progressDialog.setMessage(DIALOG_TITILE);  
  117.         progressDialog.setCancelable(false);  
  118.         progressDialog.show();  
  119.     }  
  120. }  
/**
 * 视频播放的activity<br>
 * 使用方法:<br>
 * 1、AndroidManifest.xml中添加此activity<br>
 * 2、Intent中存入待播放视频的URL,支持本地和网络<br>
 * 3、启动这个activity<br>
 * <br>
 * example:<br>
 * String url = "play url";<br>
 * Intent intent = new Intent();<br>
 * intent.setClass(this, VideoPlayActivity.class);<br>
 * intent.putExtra(VideoPlayActivity.KEY_URL, url);<br>
 * startActivity(intent);<br>
 * 
 * @author ttworking
 * 
 */
public class VideoPlayActivity extends Activity implements OnPreparedListener, OnErrorListener {
    public static final String KEY_URL = "view_url";

    private static final String TAG = "VideoPlayActivity";
    private static final int PLAY_RETURN = 2 * 1000; // 2 seconds
    private static final String KEY_PLAY_POSITON = "paly_position";
    private static final String TOAST_ERROR_URL = "Paly url is null, please check parameter:" + KEY_URL;
    private static final String TOAST_ERROR_PLAY = "Paly error, please check url exist!";
    private static final String DIALOG_TITILE = "奋力加载中,请稍后...";

    private static String url;

    private ProgressDialog progressDialog;
    private MediaController mc;
    private VideoView videoView;
    private LinearLayout llMain;
    private LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        url = getIntent().getStringExtra(KEY_URL);
        if (url == null && savedInstanceState != null) {
            url = savedInstanceState.getString(KEY_URL);
        }

        if (url == null) {
            Toast.makeText(getApplicationContext(), TOAST_ERROR_URL, Toast.LENGTH_LONG).show();
            finish();
            return;
        }

        setTheme(android.R.style.Theme_NoTitleBar_Fullscreen);

        videoView = new VideoView(this);
        videoView.setVideoURI(Uri.parse(url));
        videoView.requestFocus();
        videoView.setOnPreparedListener(this);
        videoView.setOnErrorListener(this);

        mc = new MediaController(this);
        mc.setAnchorView(videoView);
        mc.setKeepScreenOn(true);

        videoView.setMediaController(mc);

        llMain = new LinearLayout(this);
        llMain.setGravity(Gravity.CENTER_VERTICAL);
        llMain.setOrientation(LinearLayout.VERTICAL);
        llMain.setLayoutParams(params);

        llMain.addView(videoView, params);
        setContentView(llMain);

        initDialog();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);

        int palyPosition = videoView.getCurrentPosition();
        if (palyPosition > PLAY_RETURN) {
            palyPosition -= PLAY_RETURN;
        }
        outState.putInt(KEY_PLAY_POSITON, palyPosition);
        outState.putString(KEY_URL, url);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);

        videoView.seekTo(savedInstanceState.getInt(KEY_PLAY_POSITON));
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        progressDialog.cancel();

        videoView.start();
    }

    @Override
    public boolean onError(MediaPlayer mp, int what, int extra) {
        Log.d(TAG, "onError:" + url);

        Toast.makeText(getApplicationContext(), TOAST_ERROR_PLAY + "\n" + url, Toast.LENGTH_LONG).show();
        progressDialog.cancel();
        finish();

        return true;
    }

    private void initDialog() {
        progressDialog = new ProgressDialog(this);
        progressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
        progressDialog.setMessage(DIALOG_TITILE);
        progressDialog.setCancelable(false);
        progressDialog.show();
    }
}


猜你喜欢

转载自blog.csdn.net/speverriver/article/details/78974009