0
点赞
收藏
分享

微信扫一扫

Android 10.0及以上的Bitmap保存本地

妖妖妈 2022-04-01 阅读 59

项目一直用大佬的第三方PictureSelector控件,突然有个要求要生成图片保存本地,如何生成图片,网上有很多,但是发现一个本来很简单的保存图片到本地,折磨了一下午。。。

直接上代码:

public static void saveImageToGallery(Context context, Bitmap bmp)
    {
        // 首先保存图片
        File appDir = new File(Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_DCIM + File.separator + "DjgxPic");
        if (!appDir.exists())
        {
            Log.e(TAG, "去创建文件夹");
            appDir.mkdirs();
        }
        String fileName = "djgx_" + System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);
        try
        {
            Log.e(TAG, "开始保存图片");
            FileOutputStream fos = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
            // 最后通知图库更新
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(file)));
            Toast.makeText(context, "图片保存成功 ", Toast.LENGTH_LONG).show();
        } catch (FileNotFoundException e)
        {
            e.printStackTrace();
            Log.e(TAG, "保存图片失败:" + e.toString());
            Toast.makeText(context, "图片保存失败", Toast.LENGTH_LONG).show();
        } catch (IOException e)
        {
            e.printStackTrace();
            Log.e(TAG, "保存图片失败:" + e.toString());
            Toast.makeText(context, "图片保存失败", Toast.LENGTH_LONG).show();
        }
    }

保存图片至本地,一般就2种错误

1.open failed: EACCES (Permission denied)
2.open failed: ENOENT (No such file or directory)

普通的下载一般不会有什么问题
第一个问题,就是因为权限
①.动态权限申请
②.已经申请过动态权限的,在AndroidManifest的application中添加android:requestLegacyExternalStorage="true"这一句即可

第二个问题,路径
Android10,也就是SdkVersion29,系统规定了图片保存的路径,不能像以前一样乱设置路径,必须在系统路径下新建文件夹,否则就是一直无法创建文件夹
具体可以看Android 创建文件夹失败(File.mkdirs())

记录一下,方便日后用到

举报

相关推荐

0 条评论