视频播放需要使用VideoView类来实现,以下是一些VideoView的常用方法:
方法名 | 功能描述 |
---|---|
setVideoPath() | 设置要播放的视频文件位置 |
start() | 开始或继续播放视频 |
pause() | 继续播放视频 |
resume() | 将视频重头开始播放 |
seekTo() | 从指定位置开始播放视频 |
isPlaying() | 判断当前是否正在播放 |
getDuration() | 采取载入视频的时长 |
(1)修改activity_layout,加入一个视频播放用的VideoView和3个分别控制视频播放、暂停和重播的按钮,为了使按钮的点击事件写起来简便,这里的按钮我添加了onClick属性(具体用法可参考http://blog.csdn.net/htwhtw123/article/details/52456173):
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<VideoView
android:id="@+id/video_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center"/>
<LinearLayout
android:layout_height="match_parent"
android:layout_width="match_parent">
<Button
android:id="@+id/play"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Play"
android:onClick="playClick"/>
<Button
android:id="@+id/pause"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Pause"
android:onClick="pauseClick"/>
<Button
android:id="@+id/replay"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="Replay"
android:onClick="replayClick"/>
</LinearLayout>
</LinearLayout>
(2)MainActivity代码如下:
import java.io.File;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.VideoView;
public class MainActivity extends Activity {
private VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
videoView = (VideoView) findViewById(R.id.video_view);
inintVideoPath();
}
private void inintVideoPath() {
File file = new File(Environment.getExternalStorageDirectory(),
"0021.mp4");//这里两个参数分别需要些文件所在位置路径和文件全名
videoView.setVideoPath(file.getPath());
//指定视频文件路径
}
public void playClick(View v){
if(!videoView.isPlaying()){
videoView.start();//开始播放
}
}
public void pauseClick(View v){
if(videoView.isPlaying()){
videoView.pause();//暂停播放
}
}
public void replayClick(View v){
if(videoView.isPlaying()){
videoView.resume();//重新播放
}
}
@Override
protected void onDestroy() {
super.onDestroy();
if(videoView!= null){
videoView.suspend();
}
}
}
(3)不知道是不是手机比较特殊,我三星需要添加读写sd卡权限才能正常播放,而《第一行代码》上却没有写走一步:在AndroidManifest.xml里加入该权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
(4)运行效果:
但是将手机横屏后就无法播放了,然后我参考了一下《Android从入门到精通》,提供的例子横竖屏均可播放,而且添加了一个MediaController,没有按钮
(1)MainActivity
package com.example.videoplay;
import java.io.File;
import android.app.Activity;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Environment;
import android.widget.MediaController;
import android.widget.Toast;
import android.widget.VideoView;
public class MainActivity extends Activity {
private VideoView video;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
video = (VideoView) findViewById(R.id.video);
String path = Environment.getExternalStorageDirectory()+"/0021.mp4";
File file = new File(path);
MediaController mc = new MediaController(MainActivity.this);
if(file.exists()){
video.setVideoPath(file.getAbsolutePath());
video.setMediaController(mc);
video.requestFocus();
try{
video.start();
}catch(Exception e){
e.printStackTrace();
}
video.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer arg0) {
// TODO 自动生成的方法存根
Toast.makeText(MainActivity.this, "视频播放完了",
Toast.LENGTH_SHORT).show();
}
});
}else{
Toast.makeText(MainActivity.this, "视频文件不存在", Toast.LENGTH_SHORT).show();
}
}
}
(2)activity_layout里就只有VideoView:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
<VideoView
android:id="@+id/video"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:layout_gravity="center"/>
</LinearLayout>
(3)sd卡读写权限也是我自己加的,可能确实是手机有别,书上依旧没有写:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
(4)运行效果
竖屏
横屏