实用

适配Android10.0及以上保存图片到相册

2022-10-11  本文已影响0人  hudafei
public static boolean fileSaveToPublic(Context mContext, Bitmap bitmap) {
        String imgPath = MyConfig.getYxkDir("photo") + "photo_"
                + new Date().getTime() + ".jpg";
        //Android 10及以上版本
        //设置路径 Pictures/
        String folder = Environment.DIRECTORY_PICTURES;
        //设置保存参数到ContentValues中
        ContentValues values = new ContentValues();
        //设置图片名称
        values.put(MediaStore.Images.Media.DISPLAY_NAME, imgPath);
        //设置图片格式
        values.put(MediaStore.Images.Media.MIME_TYPE, "image/png");
        //设置图片路径
        values.put(MediaStore.Images.Media.RELATIVE_PATH, folder);
        //执行insert操作,向系统文件夹中添加文件
        //EXTERNAL_CONTENT_URI代表外部存储器,该值不变
        Uri uri = mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
        OutputStream os = null;
        try {
            if (uri != null) {
                //若生成了uri,则表示该文件添加成功
                //使用流将内容写入该uri中即可
                os = mContext.getContentResolver().openOutputStream(uri);
                bitmap.compress(Bitmap.CompressFormat.PNG, 100, os);
                os.flush();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (os != null) {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        MyLog.debug(uri.toString());
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri);
        mContext.sendBroadcast(intent);
        showToast("图片保存成功 ");
        return true;
    }

低于安卓10,是直接通过file文件进行创建,并且通过广播通知系统相册进行刷新的。而在安卓10以上(包含)则是通过MediaStore和contentResolver方法,进行插入到系统,原理其实是创建一个uri后写入文件,不过这个过程系统已经帮我们处理好,开发者只需要调用相关api即可。

上一篇下一篇

猜你喜欢

热点阅读