需求描述
实现截取Android应用当前界面的功能,需包含界面中视频(此博客的参考代码以存储在设备本地的视频为例,未检验在线视频的情况)当前的播放帧截图。
调研准备
首先应用需要获取设备存储的读写权限,需要在AndroidManifest.xml中加上请求权限的配置代码:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
此外,Android原生的视频播放组件VideoView不支持修改视频的分辨率(视频分辨率与容器宽高不一致时,需要让视频拉伸填充容器),因此需要自己封装一个继承了VideoView的组件;在项目中新建一个MyVideoView.java,内容如下:
package XXX;
import android.content.Context;
import android.media.MediaPlayer;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.VideoView;
import com.lzy.okgo.utils.HttpUtils;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
public class MyVideoView extends VideoView {
private static final String TAG = "####MyVideoView ";
// 记录当前播放视频的路径(用于截取播放帧)
private String currentVideoUrl;
public MyVideoView(Context paramContext) {
super(paramContext);
}
public MyVideoView(Context paramContext, AttributeSet paramAttributeSet) {
super(paramContext, paramAttributeSet);
}
public MyVideoView(Context paramContext, AttributeSet paramAttributeSet, int paramInt) {
super(paramContext, paramAttributeSet, paramInt);
}
// 判断是否为视频文件
public static boolean isVideo(String filePath) {
filePath = filePath.toLowerCase();
String[] vFiles = {".mov", ".mkv", ".mp4", ".avi"};
for (byt