美文网首页
android实现图片保存到相册,且不会出现两种一样的图片。

android实现图片保存到相册,且不会出现两种一样的图片。

作者: 背锅TV丶伴奏大师 | 来源:发表于2021-05-19 16:02 被阅读0次

    且不会报:Permission Denial: not allowed to send broadcast
    代码如下,拷贝到你工具类中

    /**
         * 保存图片到相册
         */
        public static void saveImageToGallery(Bitmap bitmap,Context context) {
            if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
                showToast( "sdcard未使用");
                return;
            }
            // 首先保存图片
            String fileName = System.currentTimeMillis() + ".jpg";
            //定义图片地址
            String ALBUM_PATH=Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "Pictures";
            File file = new File(ALBUM_PATH, fileName);
            //文件是否存在
            if (!file.getParentFile().exists()) {
                file.mkdirs();
            }
            try {
                FileOutputStream fos = new FileOutputStream(file);
                // 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在相册中
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);
                fos.flush();
                fos.close();
            } catch (FileNotFoundException e) {
                e.printStackTrace();
                return;
            } catch (IOException e) {
                e.printStackTrace();
                return;
            }
            //回收bitmap
            if(!bitmap.isRecycled()){
                bitmap.recycle();
            }
            // 其次把文件插入到系统图库,这种写法代替MediaStore.Images.Media.insertImage()来实现相册只出现一张图片.两张图片的原因:一个是自己保存的,另外一个时系统生产的缩略图
            ContentValues values = new ContentValues();
            values.put(MediaStore.Images.Media.DATA, file.getAbsolutePath());
            values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
            context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
            // 最后通知图库更新,4.4版本以上使用ACTION_MEDIA_SCANNER_SCAN_FILE,否则使用ACTION_MEDIA_MOUNTED时会报:Permission Denial: not allowed to send broadcast
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + ALBUM_PATH)));
            showSuccessToast("已成功保存到相册");
        }
    

    相关文章

      网友评论

          本文标题:android实现图片保存到相册,且不会出现两种一样的图片。

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