android - 在android中使用URI获取文件大小

标签 android file video uri

我正在开发 android 视频应用程序,我正在使用 Camera Intent 录制视频并从图库中拍摄视频。录制视频时或从图库中选择视频后,我想知道我拍摄的视频的大小。如果选择的视频大小大于 5MB,我想制定一个逻辑来向用户显示 toast 消息。 我制作了不起作用的底部逻辑,并在我尝试从 URI 获取大小的地方给了我 0 值。

提前致谢。

我的逻辑不起作用

java.net.URI juri = new java.net.URI(uri.toString());
        File mediaFile = new File(juri.getPath());
        long fileSizeInBytes = mediaFile.length();
        long fileSizeInKB = fileSizeInBytes / 1024;
        long fileSizeInMB = fileSizeInKB / 1024;

        if (fileSizeInMB > 5) {
            Toast.makeText(this,"Video files lesser than 5MB are allowed",Toast.LENGTH_LONG).show();
            return;
        }

这是我用来从图库获取视频和录制视频的代码。

public void takeVideoFromCamera(){

        File mediaFile =new File(Environment.getExternalStorageDirectory().getAbsolutePath()+ "/myvideo.mp4");

        Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
        Uri videoUri;

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
//            videoUri = FileProvider.getUriForFile(this, this.getApplicationContext().getPackageName() + ".provider", mediaFile);
            videoUri = FileProvider.getUriForFile(this, "i.am.ce.by.ncy.provider", mediaFile);
        } else {
            videoUri  = Uri.fromFile(mediaFile);
        }
        intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
        intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
        intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 5491520L);//5*1048*1048=5MB
        intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT,45);
        startActivityForResult(intent, VIDEO_CAPTURE);
    }

    public void takeVideoFromGallery(){
        Intent intent = new Intent();
        intent.setType("video/*");
        intent.setAction(Intent.ACTION_GET_CONTENT);
        long maxVideoSize = 5 * 1024 * 1024; // 10 MB
        intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, maxVideoSize);
        startActivityForResult(Intent.createChooser(intent,"Select Video"),REQUEST_TAKE_GALLERY_VIDEO);

    }

onActivityResult代码

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

            switch (requestCode) {
                case VIDEO_CAPTURE:
                        if (resultCode == RESULT_OK) {
                            showVideoImage(data.getData());
// Here I want to know what is the size of my Video File
                        } 
                    break;
                case REQUEST_TAKE_GALLERY_VIDEO:
                    if (resultCode == RESULT_OK) {
                        showVideoGallery(data);
// Here I want to know what is the size of my Video File
                    } 
                    break;
          }

最佳答案

AssetFileDescriptor fileDescriptor = getApplicationContext().getContentResolver().openAssetFileDescriptor(uri , "r");
long fileSize = fileDescriptor.getLength();

关于android - 在android中使用URI获取文件大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49415012/

相关文章:

html - 视频背景仅播放1个视频

video - FFmpeg 的 -bt(比特率容差)选项...?

android - 将图像序列转换为视频文件android java

java - JSch - 如何让用户确认主机指纹?

android - 将不同 Activity 中的唤醒锁释放到获取它的地方

c# - 在代码隐藏中设置其 url 时无法呈现图像

javascript - 为什么 (file.lastModifiedDate == file.lastModifiedDate ) 在 JavaScript 中评估为 false?

android - 双 ISO NFC 标签

android - Admob child 定向设置

javascript - 如何使用javascript从url字符串中提取url文件扩展名