相关疑难解决方法(0)

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

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

提前致谢。

我的逻辑不起作用

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;
        }
Run Code Online (Sandbox Code Playgroud)

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

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() + …
Run Code Online (Sandbox Code Playgroud)

video android uri file

5
推荐指数
3
解决办法
7853
查看次数

如何正确获取 android.net.Uri 的文件大小?

我有一个 android.net.Uri 指向我需要确定文件大小的文件。目前这是使用 contentResolver 上的查询完成的(我使用的是 Xamarin,所以它是 C#):

var cursor = contentResolver.Query(uri, new string[] {
    Android.Provider.OpenableColumns.Size,
    Android.Provider.OpenableColumns.DisplayName 
}, null, null, null);
cursor.MoveToFirst();
size = cursor.GetLong(0);
fileName = cursor.GetString(1);
cursor.Close();
Run Code Online (Sandbox Code Playgroud)

这在大多数情况下都有效,但对于某些文件,该值似乎比正确的文件大小略大(我使用 Total Commander 作为参考)。

尺寸 1 尺寸 2

必须有更好的方法来做到这一点,我真的需要确切的大小信息,并且由于文件非常大,无法先将它们读入内存。为什么我的方法会产生错误的结果?

在此先感谢您的帮助。

c# java android xamarin

4
推荐指数
1
解决办法
4252
查看次数

标签 统计

android ×2

c# ×1

file ×1

java ×1

uri ×1

video ×1

xamarin ×1