往SDCard写入数据权限 -->android:name="and_android 长按图片保存到相册 是将缓存图片保存到相册吗">
当前位置:   article > 正文

android 安卓保存图片到手机相册并且解决图片发黄问题_android 长按图片保存到相册 是将缓存图片保存到相册吗

android 长按图片保存到相册 是将缓存图片保存到相册吗

最近在研究怎么将安卓应用中的图片保存到手机相册。并且解决有一些手机保存图片到相册会出现发黄的问题。

如果要保存图片先在manifest中开启读写权限。

<!-- SDCard中创建与删除文件权限 -->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
<!-- SDCard写入数据权限 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
在安卓6之后还要在java代码中动态开启

//开启权限
ActivityCompat.requestPermissions(MainActivity.this, new String[]{android
        .Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);

首先获取到图片的bitmap对象,我使用的是Glide来加载图片所以就可以从Glide中获取到bitmap。

String url = "图片地址";
Glide.with(this)
        .load(url)
        .asBitmap()
        .dontTransform()
        .placeholder(R.drawable.back)
        .diskCacheStrategy(DiskCacheStrategy.NONE)
        .listener(new RequestListener<String, Bitmap>() {
            @Override
            public boolean onException(Exception e, String model, Target<Bitmap> target, boolean isFirstResource) {
                return false;
            }

            @Override
            public boolean onResourceReady(Bitmap bitmap, String model, Target<Bitmap> target, boolean isFromMemoryCache, boolean isFirstResource) {
                picWidth =  bitmap.getWidth();
                picHeight = bitmap.getHeight();
                mbitmap = bitmap;
                return false;
            }

        })
        .into(imageView);

然后保存图片的核心就是在这里。你可以直接保存到一个文件夹里面,也可以不为你的应用创建文件夹,但是这样图片看起来就会很凌乱。

当然还可以利用系统提供的api插入到系统相册,最后通知相册更新。

public static void saveImageToGallery(Context context, Bitmap bmp) {
        // 创建文件夹
        File appDir = new File(Environment.getExternalStorageDirectory(), "Test");
        //判断不存在就创建
        if (!appDir.exists()) {
            appDir.mkdir();
        }
        //以时间命名
        String fileName = System.currentTimeMillis() + ".jpg";
        File file = new File(appDir, fileName);
        try {
            FileOutputStream fos = new FileOutputStream(file);
            bmp.compress(Bitmap.CompressFormat.JPEG, 100, fos);
            fos.flush();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 其次把文件插入到系统图库
        try {
            MediaStore.Images.Media.insertImage(context.getContentResolver(),
                    file.getAbsolutePath(), fileName, null);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 最后通知图库更新
        String path = Environment.getExternalStorageDirectory().getPath();
        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
    }
}
在某一些手机上会出现保存的图片发黄的问题,比如小米和乐视,华为没有发现这个问题。

只要将保存的格式改为png,就正常了。

//以时间命名
String fileName = System.currentTimeMillis() + ".png";
File file = new File(appDir, fileName);
try {
    FileOutputStream fos = new FileOutputStream(file);
    bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/245850
推荐阅读
相关标签
  

闽ICP备14008679号