VideoView控件介绍
播放视频需要用到VideoView控件。VideoView类主要有以下方法:
- setVideoPath(“”):设置要播放的视频文件的位置
- setVideoURI(Uri.parse(“”)):和setVideoPath一样,setVideoPath把Uri.parse(“”)放在函数主体中而已
- start():开始或者继续播放
- pause():暂停播放
- resume():从头开始播放???在播放的时候如果调用resume()会从头开始,但是如果处于暂停状态,则没有反应。
- seekTo():从指定位置开始播放
- isPlaying():判断当前是否正在播放视频
- getDuration():获取视频的时长
- getCurrentPosition():
播放视频示例
在主页面上添加VideoView控件及几个控制播放的Button。
活动
修改活动:
package com.example.victoria.mediaplayer;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.VideoView;
import java.io.File;
public class MainActivity extends AppCompatActivity {
private Button play;
private Button pause;
private Button replay;
private VideoView videoView;
@Override
protected void onCreate(Bundle savedInstanceState) {
Log.i("main", "create");
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play = (Button) findViewById(R.id.play);
pause = (Button) findViewById(R.id.pause);
replay = (Button) findViewById(R.id.replay);
videoView = (VideoView) findViewById(R.id.video_view);
verifyStoragePermissions(MainActivity.this);
File file = new File(Environment.getExternalStorageDirectory() + "/video.mp4");
videoView.setVideoPath(file.getPath());
Log.i("main", file.getPath());
play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!videoView.isPlaying()) {
videoView.start();
}
}
});
pause.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (videoView.isPlaying()) {
videoView.pause();
}
}
});
replay.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
videoView.resume();
}
});
}
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
/**
* Checks if the app has permission to write to device storage
*
* If the app does not has permission then the user will be prompted to grant permissions
*
* @param activity
*/
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}
@Override
protected void onDestroy(){
super.onDestroy();
if(videoView != null){
videoView.suspend();
}
}
}
错误
在实体机上运行app时错误
All packages are not available for download!
The following packages are not available: -Package id platform;android-1
缺少NDK。先把项目打包成apk,然后安装到手机上。
无法播放视频的错误
- 首先在manifest中声明读写存储卡的权限。
- 对于API23+,即使manifest文件中声明了权限,还是需要在代码中请求读写权限:
// Storage Permissions
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
};
/**
* Checks if the app has permission to write to device storage
*
* If the app does not has permission then the user will be prompted to grant permissions
*
* @param activity
*/
public static void verifyStoragePermissions(Activity activity) {
// Check if we have write permission
int permission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
if (permission != PackageManager.PERMISSION_GRANTED) {
// We don't have permission so prompt the user
ActivityCompat.requestPermissions(
activity,
PERMISSIONS_STORAGE,
REQUEST_EXTERNAL_STORAGE
);
}
}