在Android 11中,由于
安全
性的增加和存储权限的限制,删除文件的方法与以往不同。现在需要使用MediaStore
API
中的方法来删除文件。
以下是一个示例代码,演示如何使用MediaStore
API
删除文件:
ContentResolver resolver = getContentResolver();
Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// 要删除的文件路径
String filePath = "/storage/emulated/0/DCIM/Camera/test.jpg";
String selection = MediaStore.Images.Media.DATA + "=?";
String[] selectionArgs = new String[]{filePath};
Cursor cursor = resolver.query(uri, null, selection, selectionArgs, null);
if (cursor != null) {
if (cursor.moveToFirst()) {
int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Images.Media._ID));
uri = ContentUris.withAppendedId(uri, id);
resolver.delete(uri, null, null);
cursor.close();
在上面的示例代码中,我们使用了MediaStore.Images.Media.EXTERNAL_CONTENT_URI
来获取外部存储媒体库的Uri。然后使用文件路径来查询对应的数据,最后从数据中获取ID并使用ContentUris
将其转换为完整的Uri,然后使用ContentResolver
删除该Uri对应的数据。
需要注意的是,如果我们使用了同样的文件路径查询两次,即使查询到的数据相同,其对应的ID也可能是不同的。因此,我们需要确保仅使用一次查询,然后使用查询结果中返回的ID来删除数据。