Android 11 删除相册图片

作为一名经验丰富的开发者,我将教会你如何在Android 11中删除相册图片。下面是整个流程的详细步骤,并附上每一步所需的代码和注释。

流程图

flowchart TD
  A[开始] --> B[获取MediaStore的Uri]
  B --> C[构建删除条件]
  C --> D[执行删除操作]
  D --> E[刷新相册]
  E --> F[结束]

步骤说明

1. 获取MediaStore的Uri

首先,我们需要获取到存储相册图片的MediaStore的Uri。在Android 11之后,访问外部存储的方式发生了变化,我们需要使用MediaStore来操作相册图片。

Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

这行代码创建了一个Uri对象,指向存储相册图片的MediaStore。

2. 构建删除条件

接下来,我们需要构建删除条件,即确定要删除的图片的路径。可以使用MediaStore提供的常量来指定删除条件。以下是一个示例:

String selection = MediaStore.Images.Media.DATA + "=?";
String[] selectionArgs = new String[]{ imagePath };

MediaStore.Images.Media.DATA表示图片的路径字段,imagePath是要删除的图片的路径。我们使用=?来表示占位符,selectionArgs中的值将会替换占位符。

3. 执行删除操作

现在,我们可以执行删除操作了。使用ContentResolver的delete()方法来删除指定的图片。

getContentResolver().delete(uri, selection, selectionArgs);

uri是要操作的Uri对象,selection是删除条件,selectionArgs是删除条件的值。

4. 刷新相册

在Android 11中,删除图片后,相册不会立即更新显示。我们需要发送广播通知系统相册更新。

MediaScannerConnection.scanFile(
    context,
    new String[]{ imagePath },
    null,
    new MediaScannerConnection.OnScanCompletedListener() {
        @Override
        public void onScanCompleted(String path, Uri uri) {
            // 刷新成功
        }
    }
);

scanFile()方法会发送广播通知系统相册更新。context是上下文对象,imagePath是要刷新的图片的路径。

完整代码示例

public void deleteImage(String imagePath) {
    // Step 1: 获取MediaStore的Uri
    Uri uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

    // Step 2: 构建删除条件
    String selection = MediaStore.Images.Media.DATA + "=?";
    String[] selectionArgs = new String[]{ imagePath };

    // Step 3: 执行删除操作
    getContentResolver().delete(uri, selection, selectionArgs);

    // Step 4: 刷新相册
    MediaScannerConnection.scanFile(
        context,
        new String[]{ imagePath },
        null,
        new MediaScannerConnection.OnScanCompletedListener() {
            @Override
            public void onScanCompleted(String path, Uri uri) {
                // 刷新成功
            }
        }
    );
}

以上就是在Android 11中删除相册图片的完整流程和代码示例。希望能帮助到你!