问题描述
我正在尝试从 uri 获取绝对文件路径。但是用某些下载管理器下载的文件无法获取。
例如,我下载了一个音频并将其存储在 /storage/emulated/0/Miui/.ringtone/Our Street (30-secs version)_&_7f2f552b-b5b8-41a0-94de-4b3b065b7c00.mp3
中。如果我从文件选择器的 Downloads
部分选择这个文件,我会得到以下 uri content://com.android.providers.downloads.documents/document/19
,但我无法从这个 uri 计算出绝对路径。
但是如果我从原始目录中选择文件,即 /storage/emulated/0/Miui/.ringtone/
我得到了这个 uri content://com.android.externalstorage.documents/document/primary%3AMiui%2F.ringtone%2FOur%20Street%20(30-secs%20version)_%26_7f2f552b-b5b8-41a0-94de-4b3b065b7c00.mp3
并且我可以从这个 url 得到绝对文件路径。
Intent chooseFile = new Intent(Intent.ACTION_GET_CONTENT);
chooseFile.addCategory(Intent.CATEGORY_OPENABLE);
chooseFile.setType("*/*");
chooseFile.putExtra(Intent.EXTRA_ALLOW_MULTIPLE,false);
startActivityForResult(Intent.createChooser(chooseFile,"Select Audio"),PICK_AUdio_RESULT_CODE);
final String id = DocumentsContract.getDocumentId(uri);
final Uri contentUri = ContentUris.withAppendedId(
Uri.parse("content://downloads/public_downloads"),Long.valueOf(id)
);
Cursor cursor = null;
final String column = "_data";
final String[] projection = {column};
try {
cursor = context.getContentResolver().query(uri,projection,selection,selectionArgs,null);
if (cursor != null && cursor.movetoFirst()) {
final int index = cursor.getColumnIndexOrThrow(column);
return cursor.getString(index);
}
} finally {
if (cursor != null)
cursor.close();
}
return null;
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)