java - Uri 文件大小始终为 0

标签 java android uri

我正在获取一个音频文件,并将其保存在 uri (android.net.Uri)

我需要在 TextView 中显示它的大小。我尝试过这样的:

这是我从用户库获取文件的地方:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.debug_layout);

        Intent selectIntent = new Intent(Intent.ACTION_GET_CONTENT);
        selectIntent.setType("audio/*");
        startActivityForResult(selectIntent, AUDIO_REQUEST_CODE);

    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if (requestCode == AUDIO_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
            if ((data != null) && (data.getData() != null)) {
                audio = data.getData();
            }
        }
    }

然后我将其传递给下一个 Activity,如下所示:

Intent debugIntent = new Intent(this, Debug.class);
        Bundle bundle = new Bundle();
        bundle.putString("audio", audio.toString());
        debugIntent.putExtras(bundle);
        startActivity(debugIntent);

并在调试 Activity 中使用它,如下所示:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.debug_layout);

    Intent intent = this.getIntent();
    Bundle bundle = intent.getExtras();
    audio = Uri.parse((String) bundle.get("audio"));

    File file = new File(audio.getPath());
    long size = file.length();
    if (file.exists()) {
        Toast.makeText(this, "exists", Toast.LENGTH_SHORT).show();
    }
    filesize = (TextView) findViewById(R.id.file_size);
    filesize.setText("file size: ".concat(String.valueOf(size)));

}

file.length() 返回 0。

我该如何解决这个问题?

最佳答案

最后我是这样修复的:

private String getRealSizeFromUri(Context context, Uri uri) {
        Cursor cursor = null;
        try {
            String[] proj = { MediaStore.Audio.Media.SIZE };
            cursor = context.getContentResolver().query(uri, proj, null, null, null);
            int column_index = cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.SIZE);
            cursor.moveToFirst();
            return cursor.getString(column_index);
        } finally {
            if (cursor != null) {
                cursor.close();
            }
        }
    }

我猜 pskink 在评论中就是这么说的,但没有费心解释......

无论如何,这是一个可行的解决方案,希望对其他用户也有用

关于java - Uri 文件大小始终为 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45589736/

相关文章:

javascript - 从 JSON 构建 URLS

java - Intellij - 为什么类的符号不显示?

java - JPedal - 在 PDF 中的某个点突出显示单词

android - 如何在 Eclipse 中向 Android 项目添加 Gradle 库?

android - 如何在 Xamarin.forms 中更改视频的分辨率

java - 将随机图像设置为imageview android

来自uri的android文件名与实际文件名不同

java - 无法从 Android 设备获取所有歌曲

Java:计算特定单词的频率并写入文件

android - 谷歌相册 URI API