145 lines
5.2 KiB
Java
145 lines
5.2 KiB
Java
package com.yunbao.video.utils;
|
|
|
|
import android.content.ContentResolver;
|
|
import android.content.ContentValues;
|
|
import android.content.Context;
|
|
import android.database.Cursor;
|
|
import android.os.Handler;
|
|
import android.os.Message;
|
|
import android.provider.MediaStore;
|
|
import android.text.TextUtils;
|
|
|
|
import com.yunbao.common.CommonAppContext;
|
|
import com.yunbao.common.interfaces.CommonCallback;
|
|
import com.yunbao.common.utils.StringUtil;
|
|
import com.yunbao.video.bean.VideoChooseBean;
|
|
|
|
import java.io.File;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
|
|
/**
|
|
* Created by cxf on 2018/6/20.
|
|
*/
|
|
|
|
public class VideoLocalUtil {
|
|
|
|
private ContentResolver mContentResolver;
|
|
private Handler mHandler;
|
|
private CommonCallback<List<VideoChooseBean>> mCallback;
|
|
private boolean mStop;
|
|
|
|
public VideoLocalUtil() {
|
|
mContentResolver = CommonAppContext.sInstance.getContentResolver();
|
|
mHandler = new Handler() {
|
|
@Override
|
|
public void handleMessage(Message msg) {
|
|
if (mCallback != null && msg != null) {
|
|
mCallback.callback((List<VideoChooseBean>) msg.obj);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
public void getLocalVideoList(CommonCallback<List<VideoChooseBean>> callback) {
|
|
if (callback == null) {
|
|
return;
|
|
}
|
|
mCallback = callback;
|
|
new Thread(new Runnable() {
|
|
@Override
|
|
public void run() {
|
|
if (mHandler != null) {
|
|
List<VideoChooseBean> videoList = getAllVideo();
|
|
Message msg = Message.obtain();
|
|
msg.obj = videoList;
|
|
mHandler.sendMessage(msg);
|
|
}
|
|
}
|
|
}).start();
|
|
}
|
|
|
|
private List<VideoChooseBean> getAllVideo() {
|
|
List<VideoChooseBean> videoList = new ArrayList<>();
|
|
String[] mediaColumns = new String[]{
|
|
MediaStore.Video.VideoColumns._ID,
|
|
MediaStore.Video.VideoColumns.DATA,
|
|
MediaStore.Video.VideoColumns.DISPLAY_NAME,
|
|
MediaStore.Video.VideoColumns.DURATION
|
|
};
|
|
Cursor cursor = null;
|
|
try {
|
|
cursor = mContentResolver.query(
|
|
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
|
mediaColumns, null, null, null);
|
|
if (cursor != null) {
|
|
while (!mStop && cursor.moveToNext()) {
|
|
String videoPath = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
|
|
File file = new File(videoPath);
|
|
boolean canRead = file.canRead();
|
|
long length = file.length();
|
|
if (!canRead || length == 0) {
|
|
continue;
|
|
}
|
|
long duration = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
|
|
if (duration <= 0) {
|
|
continue;
|
|
}
|
|
String videoName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME));
|
|
if (TextUtils.isEmpty(videoName) || !videoName.endsWith(".mp4")) {
|
|
continue;
|
|
}
|
|
VideoChooseBean bean = new VideoChooseBean();
|
|
bean.setVideoPath(videoPath);
|
|
bean.setDuration(duration);
|
|
bean.setVideoName(videoName);
|
|
bean.setDurationString(StringUtil.getDurationText(duration));
|
|
videoList.add(bean);
|
|
}
|
|
}
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
} finally {
|
|
if (cursor != null) {
|
|
cursor.close();
|
|
}
|
|
}
|
|
return videoList;
|
|
}
|
|
|
|
public void release() {
|
|
mStop = true;
|
|
mCallback = null;
|
|
if (mHandler != null) {
|
|
mHandler.removeCallbacksAndMessages(null);
|
|
}
|
|
mHandler = null;
|
|
}
|
|
|
|
|
|
/**
|
|
* 把视频保存到ContentProvider,在选择上传的时候能找到
|
|
*/
|
|
public static void saveVideoInfo(Context context, String videoPath, long duration) {
|
|
try {
|
|
File videoFile = new File(videoPath);
|
|
String fileName = videoFile.getName();
|
|
long currentTimeMillis = System.currentTimeMillis();
|
|
ContentValues values = new ContentValues();
|
|
values.put(MediaStore.MediaColumns.TITLE, fileName);
|
|
values.put(MediaStore.MediaColumns.DISPLAY_NAME, fileName);
|
|
values.put(MediaStore.MediaColumns.DATE_MODIFIED, currentTimeMillis);
|
|
values.put(MediaStore.MediaColumns.DATE_ADDED, currentTimeMillis);
|
|
values.put(MediaStore.MediaColumns.DATA, videoPath);
|
|
values.put(MediaStore.MediaColumns.SIZE, videoFile.length());
|
|
values.put(MediaStore.Video.VideoColumns.DATE_TAKEN, currentTimeMillis);
|
|
values.put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4");
|
|
values.put(MediaStore.Video.VideoColumns.DURATION, duration);
|
|
context.getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);
|
|
} catch (Exception e) {
|
|
e.printStackTrace();
|
|
}
|
|
}
|
|
|
|
}
|