用到的依赖:

加载框:

   /*** Android仿ios的自定义dialog,loading和toast*  简书:https://www.jianshu.com/p/9259ad7f857b*  GitHub:https://github.com/mamumu/mmDialog*/implementation 'com.github.mamumu:mmDialog:1.2.0'

权限申请

/*** rxPermission* https://github.com/tbruyelle/RxPermissions*/
implementation 'com.github.tbruyelle:rxpermissions:0.10.2'

用到的权限:

<!--网络-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 读写文件 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

工具类

import android.annotation.SuppressLint;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;import com.blankj.utilcode.util.ToastUtils;
import com.mumu.dialog.MMLoading;import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.util.UUID;public class DownloadSaveImg {private static Context context;private static String filePath;private static Bitmap mBitmap;private static String mSaveMessage = "失败";private static MMLoading mmLoading;public static void downloadImg(Context contexts, String filePaths) {context = contexts;filePath = filePaths;MMLoading.Builder builder = new MMLoading.Builder(contexts).setMessage("保存中...").setCancelable(false).setCancelOutside(false);mmLoading = builder.create();mmLoading.show();new Thread(saveFileRunnable).start();}private static Runnable saveFileRunnable = new Runnable() {@Overridepublic void run() {try {if (!TextUtils.isEmpty(filePath)) { //网络图片// 对资源链接URL url = new URL(filePath);//打开输入流InputStream inputStream = url.openStream();//对网上资源进行下载转换位图图片mBitmap = BitmapFactory.decodeStream(inputStream);inputStream.close();}saveFile(mBitmap);mSaveMessage = "图片已保存至相册";} catch (IOException e) {mSaveMessage = "图片保存失败!";e.printStackTrace();} catch (Exception e) {e.printStackTrace();}messageHandler.sendMessage(messageHandler.obtainMessage());}};@SuppressLint("HandlerLeak")private static Handler messageHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {mmLoading.dismiss();ToastUtils.showShort(mSaveMessage);}};/*** 保存图片* @param bm* @throws IOException*/public static void saveFile(Bitmap bm) throws IOException {File dirFile = new File(Environment.getExternalStorageDirectory().getPath());if (!dirFile.exists()) {dirFile.mkdir();}String fileName = UUID.randomUUID().toString() + ".png";String filePath = getExternalStoragePicPath(fileName);assert filePath != null;File myCaptureFile = new File(filePath);BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));bm.compress(Bitmap.CompressFormat.PNG, 80, bos);bos.flush();bos.close();//把图片保存后声明这个广播事件通知系统相册有新图片到来Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);Uri uri = Uri.fromFile(myCaptureFile);intent.setData(uri);context.sendBroadcast(intent);}private static String getExternalStoragePicPath(String imageFileName) {File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + File.separator + "hyx");boolean success = true;if (!storageDir.exists()) {success = storageDir.mkdirs();}if (success) {File imageFile = new File(storageDir, imageFileName);return imageFile.getAbsolutePath();}return null;}
}

使用案例

@OnClick(R.id.btn_save_img)void saveImgOnClick() {saveImage(icon);}private void saveImage(String src) {final RxPermissions rxPermissions = new RxPermissions(mActivity);Disposable disposable = rxPermissions.request(Manifest.permission.WRITE_EXTERNAL_STORAGE).subscribe(granted -> {if (granted) {DownloadSaveImg.downloadImg(mActivity, src);} else {// Oups permission deniedToastUtils.showShort("存储权限被拒绝,无法保存");}});}

安卓 保存图片到相册相关推荐

  1. 安卓10(Android10\API29)保存图片到相册DCIM/Camera

    大家都知道Android10最大的变化可能就是Scoped Storage(分区存储).对于把图片保存到相册的应用,影响就大了,因为这个功能在Android10的手机上就会出现异常了,今天就来说说如何 ...

  2. 鸿蒙 保存图片到相册

    核心代码: //保存图片到相册 fileName文件名 PixelMap 图片数据private void saveImageToLibrary(String fileName, PixelMap p ...

  3. Unity保存图片到相册

    Unity保存图片到Android相册 Java] 纯文本查看 复制代码 ? 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 2 ...

  4. uniapp保存图片_Uniapp实现保存图片到相册(封装起来)

    我封装了一个方法,之后可以直接使用 在此之前,先用class封装一个Toast提示框 class Toast{ constructor(title,icon="success",d ...

  5. 微信小程序保存图片到相册;uni-app小程序保存网络图片到相册;小程序保存图片到相册拒绝授权后重新拉起授权;保存图片到系统相册;小程序保存图片测试可以,真机保存图片失败

    文末代码可以直接复制使用,图片修改成你的图片路径即可 一.场景: 小程序点击按钮,保存项目内的静态图片或者微信头像或者后端返回的图片: 二.注意点及思路拆分: –2.1:小程序保存图片功能,必须要有s ...

  6. 微信小程序--保存图片到相册功能实现

    项目中有个保存二维码到相册的功能,所以涉及到用户是否授权相册权限的问题.废话不多说,直接上干货- 功能逻辑: 先检查用户请求过的权限中是否允许"保存到相册"权限,如果没有请求过这个 ...

  7. 保存图片到相册并打开微信扫一扫

    uni.downloadFile({ //保存图片到本地url: this.codeImg, //仅为示例,并非真实的资源success: (res) => {if (res.statusCod ...

  8. vue2.0 webApp保存图片到相册

    ios下a标签不能直接下载图片.为了兼容android和ios找到了h5plus.里面有个保存到相册的功能. 代码很简单,如下: saveImage{if(!window.plus) return;p ...

  9. Android开发之保存图片到相册的三种方法详解

    有三种方法如下:三个方法都需要动态申请读写权限否则保存图片到相册也会失败 方法一: /**      * 保存bitmap到本地      *      * @param bitmap Bitmap ...

最新文章

  1. SpringBoot实现通用的接口参数校验
  2. 【年度总结】我的2018年
  3. 什么是DDOS攻击?怎么防御?
  4. WireShark 探索网络请求过程(五层网络模型、三次握手、滑动窗口协议)
  5. 【Java_多线程并发编程】JUC原子类——4种原子类
  6. log-slave-updates 引起 MySQL 从节点同步异常慢
  7. git每次操作都要输入账号密码 解决方案
  8. BZOJ 1898: [Zjoi2005]Swamp 沼泽鳄鱼 [矩阵乘法]
  9. JSON serializing and deserializing using JSON.NET
  10. C++笔记-使用std::funcional代替函数指针
  11. Java怎么给窗口设置背景
  12. Git报错:Git failed with a fatal error. Git failed with a fatal error. Need to specify how to reconcile
  13. 基于单片机的函数信号波形发生器系统设计(#0428)
  14. python爬虫学习
  15. html把背景设为白色,ps中图片背景怎么改成白色?
  16. Direct3D初始化失败的原因
  17. 信鸽推送集成采坑之代码混淆报错/XINGE: [Util] please add wup-1.0.0.E-SNAPSHOT.jar in your libs
  18. JSP页面调用log4j写日志文件
  19. Mybatis开启驼峰命名,作用
  20. “五小”成果技术报告 野外小队信息管理系统Ver1.00

热门文章

  1. matlab实现矩阵拼接
  2. 字节跳动面试凉经(挂三面)
  3. 所有计算机用户的共同点,2016年职称计算机WindowsXP考前押题及答案3
  4. Python自动化:提取扫描件中的文字
  5. ucla 计算机网络,2020年UCLA计算机工程排名珍贵干货专业讲解
  6. 设计一个中国象棋游戏,ChessPiece为抽象类,提供代表一个棋子位置的属性和方法,和isMoveLegal();设计ChessPiece的具体实现类(如车,马,帅等)
  7. 手把手教你win10下安装Anaconda
  8. 自媒体账号ID应该怎么取?
  9. 适合中国学生的AP课程有哪些?内附课程详解
  10. 怎么把两个音频合成一个