Uri 文件大小始终为 0



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

我需要在文本视图中显示它的大小。我试过这样:

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

@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();
}
}
}

然后我像这样将其传递给下一个活动:

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

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

@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 所说的,但没有费心解释......

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

最新更新