方式1.
使用Intent 隐式跳转(Action)Intent.Action_View
Intent intent=new Intent(Intent.Action_View);
Uri data=Uri.parse("mnt/sdcard/xxx.mp4");//放网址试试
intent.setDataAndType(data,"video/mp4");
startActivity(intent);
第三方权限可读 SD卡的
方式2.
VideoView 结合 MediaController 播放视频
VideoView用于播放视频文件,可以计算和维护视频的画面尺寸使其适用于任何布局管理器,并提供一些诸如缩放,着色之类的显示选项.
MediaController
一个包含媒体播放器的(MediaPlayer)的控件的视图,包含了一些典型的按钮,像"播放play/暂停pause,"倒带Rewind","快进(FastForward)"与"与进度滑动器"(progress slider),它管理媒体播放器(MediaController)的状态以保持控件的同步.
Videoview vv=(Videoview)findviewByid;
vv.setVideoPath("mnt/sdcard/...mp4");
MediaController controller=new MediaController(this);
controller.setMediaPlayer(vv);
vv.setMediaController(controller);
方式3.
SurfaceView
具有双缓冲机制的View,继承自View,用来播放视频,做游戏等频繁刷新界面的功能.
可以在子线程中更新UI,不会导致主线程阻塞ANR.
先找SV控件创建MediaPlayer() 要设置上Path 俩种create或者setData...
public class MainActivity extends Activity {
private SurfaceView surfaceView;
private MediaPlayer mediaPlayer;
SurfaceHolder sh;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/**
* 双缓冲机制
* 第1个线程 先更新UI 后计算
*
* 第2个线程 先计算 后更新UI
*/
surfaceView=(SurfaceView) findViewById(R.id.surgfaceview);
//加载视频路径
mediaPlayer=MediaPlayer.create(this, Uri.parse("mnt/sdcard/yellowMan.mp4"));
new Thread(){
public void run() {
sh=surfaceView.getHolder();
sh.addCallback(new Callback() {
//销毁之后
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
// TODO Auto-generated method stub
mediaPlayer
.stop();
.relase(); mediaPlayer
=null; mediaPlayer
}
//创建完成
@Override
public void surfaceCreated(SurfaceHolder holder) {
// TODO Auto-generated method stub
mediaPlayer.setDisplay(sh);
mediaPlayer.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width,
int height) {
// TODO Auto-generated method stub
}
});
};
}.start();
}
}