我正在研究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;
}
答案 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
}