Java 如何删除只有内容uri的文件?

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,看

在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,看起来像这样:
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");
                    }
                }
            }
        }
    }