mport android.content.ContentUris;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.util.Log;
import com.zhihu.matisse.MimeType;
/**
* 创建人: zp
* 创建时间:2017/8/3
*/
public class VideoLoader implements LoaderManager.LoaderCallbacks<Cursor>{
private static final String TAG = "VideoLoader";
public static final Uri QUERY_URI = MediaStore.Files.getContentUri("external");
public static final String SELECTION =
MediaStore.Files.FileColumns.MEDIA_TYPE + "=?"
+ " AND " + MediaStore.MediaColumns.SIZE + ">0";
public static final String[] SELECTION_ARGS = new String[]{String.valueOf(MediaStore.Files.FileColumns.MEDIA_TYPE_VIDEO)};
public static final String[] PROJECTION = {
MediaStore.Files.FileColumns._ID,
MediaStore.MediaColumns.DISPLAY_NAME,
MediaStore.MediaColumns.MIME_TYPE,
MediaStore.MediaColumns.SIZE,
"duration"};
public static final String ORDER_BY = MediaStore.Images.Media.DATE_TAKEN + " DESC";
private Context mContext;
public VideoLoader(Context mContext) {
this.mContext = mContext;
}
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
return new CursorLoader(mContext,QUERY_URI,PROJECTION,SELECTION,SELECTION_ARGS,ORDER_BY);
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor result) {
if (result == null) return;
while (result.moveToNext()){
VideoInfo info = valueOf(result);
Log.d(TAG, info.toString());
}
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
public class VideoInfo {
public final long id;
public final String mimeType;
public final Uri uri;
public final long size;
public final long duration; // only for video, in ms
private VideoInfo(long id, String mimeType, long size, long duration) {
this.id = id;
this.mimeType = mimeType;
Uri contentUri;
if (isVideo()) {
contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;
} else {
// ?
contentUri = MediaStore.Files.getContentUri("external");
}
this.uri = ContentUris.withAppendedId(contentUri, id);
this.size = size;
this.duration = duration;
}
public boolean isVideo() {
return mimeType.equals(MimeType.MPEG.toString())
|| mimeType.equals(MimeType.MP4.toString())
|| mimeType.equals(MimeType.QUICKTIME.toString())
|| mimeType.equals(MimeType.THREEGPP.toString())
|| mimeType.equals(MimeType.THREEGPP2.toString())
|| mimeType.equals(MimeType.MKV.toString())
|| mimeType.equals(MimeType.WEBM.toString())
|| mimeType.equals(MimeType.TS.toString())
|| mimeType.equals(MimeType.AVI.toString());
}
@Override
public String toString() {
return "VideoInfo{" +
"id=" + id +
", mimeType='" + mimeType + '\'' +
", uri=" + uri +
", size=" + size +
", duration=" + duration +
'}';
}
}
public VideoInfo valueOf(Cursor cursor) {
return new VideoInfo(cursor.getLong(cursor.getColumnIndex(MediaStore.Files.FileColumns._ID)),
cursor.getString(cursor.getColumnIndex(MediaStore.MediaColumns.MIME_TYPE)),
cursor.getLong(cursor.getColumnIndex(MediaStore.MediaColumns.SIZE)),
cursor.getLong(cursor.getColumnIndex("duration")));
}
}
这是调用方法
结果