2

我正在开发从图库中选择视频文件的 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;
}
4

2 回答 2

2

您可以通过选择视频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
}
于 2018-03-21T16:34:13.917 回答
2

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

您可能会查看是否有满足您需求的文件选择器库。否则,您将需要自己创建此 UI,查询MediaStore并仅显示满足您要求的视频。

于 2018-03-21T16:20:25.200 回答