在Video Gallery android中显示小于5 MB的视频文件

时间:2018-03-21 16:15:46

标签: android limit video-gallery

我正在研究Android应用程序,我从库中选择视频文件。一切都很好,但我想在5MB以下显示视频文件,我不想显示超过5MB的所有视频。我在下面给出了显示视频库和onActivityResult的代码:

public void takeVideoFromGallery(){
        Intent intent = new Intent();
        intent.setType("video/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        startActivityForResult(Intent.createChooser(intent,"Select Video"),REQUEST_TAKE_GALLERY_VIDEO);

    }
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (resultCode == this.RESULT_OK) {

            switch (requestCode) {

case REQUEST_TAKE_GALLERY_VIDEO:
                    if (resultCode == RESULT_OK) {
                        showVideoGallery(data);
                        Toast.makeText(this, "Video saved to:\n" +data.getData(), Toast.LENGTH_LONG).show();

                    } else if (resultCode == RESULT_CANCELED) {
                        Toast.makeText(this, "Video recording cancelled.",Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(this, "Failed to record video",Toast.LENGTH_LONG).show();
                    }
                    break;
}

2 个答案:

答案 0 :(得分:2)

ACTION_GET_CONTENT中没有任何内容允许您提供任意过滤器,例如最大尺寸。

您可能会看到a file picker library是否符合您的需求。否则,您需要自己创建此用户界面,查询MediaStore并仅显示符合您要求的视频。

答案 1 :(得分:0)

您可以通过ACTION_PICK选择视频,并添加EXTRA_SIZE_LIMIT

等额外内容

参考:https://developer.android.com/reference/android/provider/MediaStore.html#EXTRA_SIZE_LIMIT

注意:EXTRA_SIZE_LIMIT信息在许多情况下不起作用。

val intent = Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, Constant.MAX_VIDEO_SIZE_IN_MB)
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, MAX_VIDEO_RECORDING_TIME_IN_SEC)
intent.type = "video/*"
startActivityForResult(intent, PICK_VIDEO_GALLERY)

您可以通过比较文件大小 (注意:如果涉及尺寸,最好在使用之前压缩视频)

val compressedVideoFile = File(mVideoOutPath)
if (compressedVideoFile.length() > Constant.MAX_VIDEO_FILE_SIZE_IN_BYTES) {
    ToastUtils.shortToast(this@ChatActivity, getString(R.string.error_video_size))
else if (FileUtil.getVideoDuration(this@ChatActivity, compressedVideoFile) > Constant.MAX_VIDEO_FILE_DURATION_IN_MILLIS) {
    ToastUtils.shortToast(this@ChatActivity, getString(R.string.error_video_length))
} else {
    mVideoFilePath = mVideoOutPath
    uploadMedia(Constant.KEY_VIDEO)
}

用于检索视频时长(如果您想要检查持续时间):

fun getVideoDuration(context: Context, selectedVideoFile: File): Long {
    var videoDuration = java.lang.Long.MAX_VALUE
    try {
        val retriever = MediaMetadataRetriever()
        retriever.setDataSource(context, Uri.fromFile(selectedVideoFile))
        val time = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION)
        videoDuration = java.lang.Long.parseLong(time)
        retriever.release()
    } catch (e: IllegalArgumentException) {
        e.printStackTrace()
    } catch (e: SecurityException) {
        e.printStackTrace()
    }

    return videoDuration
}