【问题标题】:How to delete an image from device in Android programmatically?如何以编程方式从 Android 设备中删除图像?
【发布时间】:2020-03-04 10:15:12
【问题描述】:

我正在创建一个应用程序,允许用户从图库中选择图像并将其存储在我的数据库中。 我成功地做到了。

现在我也希望从手机存储中删除所选图像。 那我该怎么做呢?

我什至可能想稍后在用户库中恢复它。

这就是我从图库中获取图像的方法。

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) 
{
    switch (requestCode)
    {
        case 42:
            if (resultCode == RESULT_OK)
            {
                Uri uri = data.getData();
                InputStream inputStream = null;
                try
                {
                    inputStream = getBaseContext().getContentResolver().openInputStream(uri);
                    Bitmap bm = BitmapFactory.decodeStream(inputStream);
                    int maxHeight = 1920;
                    int maxWidth = 1920;
                    float scale = Math.min(((float) maxHeight / bm.getWidth()), ((float) maxWidth / bm.getHeight()));
                    Matrix matrix = new Matrix();
                    matrix.postScale(scale, scale);
                    Bitmap bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
                    saveImageToInternalStorage(bitmap, getFileName(uri));
                    bm.recycle();
                    bitmap.recycle();
                    finishActivity(42);
                }
                catch (FileNotFoundException e)
                {
                    e.printStackTrace();
                }
            }
    }
}

这是我得到的 Uri 路径

content://com.android.providers.media.documents/document/image%3A5857

我的 onActivityResult 看起来像这样:

 @Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data)
{
    switch (requestCode)
    {
        case 42:
            if (resultCode == RESULT_OK)
            {
                Uri uri = data.getData();
                InputStream inputStream = null;
                try
                {
                    inputStream = getBaseContext().getContentResolver().openInputStream(uri);
                    Bitmap bm = BitmapFactory.decodeStream(inputStream);
                    int maxHeight = 1920;
                    int maxWidth = 1920;
                    float scale = Math.min(((float) maxHeight / bm.getWidth()), ((float) maxWidth / bm.getHeight()));
                    Matrix matrix = new Matrix();
                    matrix.postScale(scale, scale);
                    Bitmap bitmap = Bitmap.createBitmap(bm, 0, 0, bm.getWidth(), bm.getHeight(), matrix, true);
                    saveImageToInternalStorage(bitmap, getFileName(uri));

                    bm.recycle();
                    bitmap.recycle();
                    finishActivity(42);
                }
                catch (FileNotFoundException e)
                {
                    e.printStackTrace();
                }
            }
    }
}

【问题讨论】:

  • getContentResolver().delete(uri, null, null);对 Android Q 来说已经足够了。
  • 需要 android.permission.MANAGE_DOCUMENTS 或 grantUriPermission() -> 给我这个错误并且图像未被删除@blackapps
  • 请发布一个 onActivityResult 函数,您只尝试删除所选图像。并告诉那里是哪个 Android 版本。
  • 不工作@blackapps
  • 你没有发布任何内容。

标签: android android-studio android-intent android-gallery


【解决方案1】:

您是否也在问同样的问题Delete image file from device programmatically 也许您可以从那里获得解决方案。

【讨论】:

    【解决方案2】:

    试试这个

    public static boolean delete(final Context context, final File file) {
          final String where = MediaStore.MediaColumns.DATA + "=?";
           final String[] selectionArgs = new String[] {
                file.getAbsolutePath()
         };
       final ContentResolver contentResolver = context.getContentResolver();
       final Uri filesUri = MediaStore.Files.getContentUri("external");
       contentResolver.delete(filesUri, where, selectionArgs);
    
    if (file.exists()) {
    
        contentResolver.delete(filesUri, where, selectionArgs);
    }
    return !file.exists();
    

    }

    【讨论】:

    • 我在哪里写这个?
    • 将此添加到任何类中并在您想要的位置调用它,例如创建类 ImageDelete 并粘贴此代码并调用您想要删除图像的位置。如果你有 Uri 而不是将 Uri 转换为文件而不是调用它
    • 这是什么(“外部”)
    • 其存储位置外部和内部
    猜你喜欢
    • 2017-01-24
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    • 2023-03-18
    • 1970-01-01
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多