Android获取视频音频的时长的方法

来源:互联网 发布:未来人工智能龙头股 编辑:程序博客网 时间:2024/05/18 00:17
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")));    }}



这是调用方法


结果





原创粉丝点击