Button click event:
Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, REQUEST_VIDEO_CODE);
打開方式有兩種action,1.ACTION_PICK;2.ACTION_GET_CONTENT 區分大意爲:ACTION_PICK 爲打開特定數據一個列表來供用戶挑選,其中數據爲現有的數據。而 ACTION_GET_CONTENT 區別在於它允許用戶創建一個之前並不存在的數據。
Api : http://www.android-doc.com/reference/android/content/Intent.html#ACTION_GET_CONTENT
onActivityResult :
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_VIDEO_CODE) {
if (resultCode == RESULT_OK) {
Uri uri = data.getData();
ContentResolver cr = this.getContentResolver();
/** 數據庫查詢操作。
* 第一個參數 uri:爲要查詢的數據庫+表的名稱。
* 第二個參數 projection : 要查詢的列。
* 第三個參數 selection : 查詢的條件,相當於SQL where。
* 第三個參數 selectionArgs : 查詢條件的參數,相當於 ?。
* 第四個參數 sortOrder : 結果排序。
*/
Cursor cursor = cr.query(uri, null, null, null, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
// 視頻ID:MediaStore.Audio.Media._ID
int videoId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
// 視頻名稱:MediaStore.Audio.Media.TITLE
String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
// 視頻路徑:MediaStore.Audio.Media.DATA
String videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
// 視頻時長:MediaStore.Audio.Media.DURATION
int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
// 視頻大小:MediaStore.Audio.Media.SIZE
long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));
// 視頻縮略圖路徑:MediaStore.Images.Media.DATA
String imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
// 縮略圖ID:MediaStore.Audio.Media._ID
int imageId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));
// 方法一 Thumbnails 利用createVideoThumbnail 通過路徑得到縮略圖,保持爲視頻的默認比例
// 第一個參數爲 ContentResolver,第二個參數爲視頻縮略圖ID, 第三個參數kind有兩種爲:MICRO_KIND和MINI_KIND 字面意思理解爲微型和迷你兩種縮略模式,前者分辨率更低一些。
Bitmap bitmap1 = MediaStore.Video.Thumbnails.getThumbnail(cr, imageId, MediaStore.Video.Thumbnails.MICRO_KIND, null);
// 方法二 ThumbnailUtils 利用createVideoThumbnail 通過路徑得到縮略圖,保持爲視頻的默認比例
// 第一個參數爲 視頻/縮略圖的位置,第二個依舊是分辨率相關的kind
Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(imagePath, MediaStore.Video.Thumbnails.MICRO_KIND);
// 如果追求更好的話可以利用 ThumbnailUtils.extractThumbnail 把縮略圖轉化爲的制定大小
// ThumbnailUtils.extractThumbnail(bitmap, width,height ,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
setText(tv_VideoPath, R.string.path, videoPath);
setText(tv_VideoDuration, R.string.duration, String.valueOf(duration));
setText(tv_VideoSize, R.string.size, String.valueOf(size));
setText(tv_VideoTitle, R.string.title, title);
iv_VideoImage.setImageBitmap(bitmap1);
}
cursor.close();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
具體的解釋說明看上面的代碼註釋。
代碼傳送門: https://github.com/YueZp/VideoPickDemo.git