美文网首页
Android Q适配之保存图片到内存卡

Android Q适配之保存图片到内存卡

作者: 在寻找雪见的景天 | 来源:发表于2019-10-26 16:04 被阅读0次

    前言

    最近应用要适配Android Q,其中有一项适配影响比较大,那就是【分区存储】。这个就是和iOS一样,不允许你随便写文件到内存卡,以前我们可以任意在内存卡上建文件夹和建文件,每个应用都这么搞的话,内存卡目录真的很乱。升级Android Q后,当targetSdkVersion>=Q,就不允许这样做了。还用之前的方法保存图片,会保存不了。

    注意点

    假如手机系统是Q,先安装了targetSdkVersion<Q的应用,然后应用升级targetSdkVersion>=Q,这个情况,用之前的方法,依然是可以保存图片的。一旦这个应用卸载,再重新安装的话,就不能保存图片了。所以,不要高兴得太早。还是要做适配的。

    适配点

    1、如果是生成一些缓存图片,素材等,可以放在这个目录:
    context.getExternalFilesDir(null),这个对应的就是 /storage/emulated/0/Android/data/com.xxxx.yyy/files
    这个目录下的文件,会随着应用的卸载而删除。

    2、如果要保存一些海报图片,又希望这些图片在应用卸载后依然保留在手机。那就保存在公共存储目录吧,/storage/emulated/0/Pictures ,按照以前保存在内存卡新建的文件夹是行不通的了。
    保存方法:

        /**
         * 保存图片到picture 目录,Android Q适配,最简单的做法就是保存到公共目录,不用SAF存储
         *
         * @param context
         * @param bitmap
         * @param fileName
         */
        public static boolean addPictureToAlbum(Context context, Bitmap bitmap, String fileName) {
            ContentValues contentValues = new ContentValues();
            contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
            contentValues.put(MediaStore.Images.Media.DESCRIPTION, fileName);
            contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
            Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
            OutputStream outputStream = null;
            try {
                outputStream = context.getContentResolver().openOutputStream(uri);
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
                outputStream.close();
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            }
            return true;
        }
    

    相关文章

      网友评论

          本文标题:Android Q适配之保存图片到内存卡

          本文链接:https://www.haomeiwen.com/subject/ciykvctx.html