Java 如何删除只有内容uri的文件?
在API 29之前,我删除了文件,其路径是从Java 如何删除只有内容uri的文件?,java,android,Java,Android,在API 29之前,我删除了文件,其路径是从MediaStore.Audio.Media.DATA列中获得的,该列现在已被弃用 现在我就是这样做的 song.setData(ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID)))); 但这将返回一个内容uri,看
MediaStore.Audio.Media.DATA
列中获得的,该列现在已被弃用
现在我就是这样做的
song.setData(ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media._ID))));
但这将返回一个内容uri,看起来像这样:content://media/external/audio/media/92079
之前,我刚刚对内部存储上的文件执行了file.delete
,对外部存储上的文件执行了documentFile.delete()
但是现在我只有内容uri,而没有媒体文件的路径,它不再工作了
那么,如何删除文件而不依赖MediaStore.Audio.Media.DATA
获取媒体文件的路径呢
API 29之前使用数据列的完整代码
private void deleteFile(Uri uri, File file){
if (file.delete()){
Log.i(TAG,"internal delete!");
return;
}
if (getActivity() != null && file.exists()) {
DocumentFile pickedDir = DocumentFile.fromTreeUri(getActivity(), uri);
String filename = file.getName();
try {
getActivity().getContentResolver().takePersistableUriPermission(uri, Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
} catch (SecurityException e) {
Log.e(TAG, "SecurityException caught when deleting FilePath!", e);
}
Log.d(TAG, "fileName: " + filename);
if (pickedDir != null) {
DocumentFile documentFile = pickedDir.findFile(filename);
if (documentFile != null && documentFile.exists()) {
if (documentFile.delete()) {
Log.i(TAG, "Delete successful");
} else {
Log.i(TAG, "Delete unsuccessful");
}
}
}
}
}