有一种很常见的需求,当保存图片的时候,客户需要在相册里面看到那张图片。有时候确实是保存成功了(通过IO流将图片写入了SDCard),但打开相册却看不到那张图片,需要在文件管理软件上才能找到那张图片,在网上找了许多文章,貌似都保存不到相册那里,这应该就是手机品牌的原因,有的品牌的手机能显示在相册里,有的品牌的手机却不能。解决这种问题,最简单粗暴的方法是,用那台手机拍一张照片,然后找到它,查看它的路径详情,直接根据路径用IO流写入,Android SDK 的 Build.BRAND 变量为当前手机的品牌,根据不同的品牌来做兼容处理,如果有读者用了这篇文章的代码还是不能在相册显示,可以对着这个思路来做兼容。另外值得一提的是,图片格式需要为JPEG格式才能显示在相册中,我们拍的照片也是JPEG格式的。下面用代码来实现上述的想法。

鉴于目前手机的版本普遍为Android 6.0 以上,读写外部存储文件都需要动态申请权限。这部分代码可以在当前需要读写外部存储文件的Activity中写。

String[] PERMISSIONS = {"android.permission.READ_EXTERNAL_STORAGE","android.permission.WRITE_EXTERNAL_STORAGE" };
//检测是否有写的权限
int permission = ContextCompat.checkSelfPermission(this,"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {// 没有写的权限,去申请写的权限,会弹出对话框ActivityCompat.requestPermissions(this, PERMISSIONS,1);
}保存文件的方法:
public void SaveBitmapFromView(View view) {int w = view.getWidth();int h = view.getHeight();Bitmap bmp = Bitmap.createBitmap(w, h, Bitmap.Config.ARGB_8888);Canvas c = new Canvas(bmp);view.layout(0, 0, w, h);view.draw(c);// 缩小图片Matrix matrix = new Matrix();matrix.postScale(0.5f,0.5f); //长和宽放大缩小的比例bmp = Bitmap.createBitmap(bmp,0,0,               bmp.getWidth(),bmp.getHeight(),matrix,true);DateFormat format = new SimpleDateFormat("yyyyMMddHHmmss");  saveBitmap(bmp,format.format(new Date())+".JPEG");
}/** 保存文件,文件名为当前日期*/
Public void saveBitmap(Bitmap bitmap, String bitName){String fileName ;File file ;if(Build.BRAND .equals("Xiaomi") ){ // 小米手机 fileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/Camera/"+bitName ;}else{  // Meizu 、OppofileName = Environment.getExternalStorageDirectory().getPath()+"/DCIM/"+bitName ;}file = new File(fileName);if(file.exists()){file.delete();}FileOutputStream out;try{out = new FileOutputStream(file);// 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在相册中if(bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)){out.flush();out.close();
// 插入图库   MediaStore.Images.Media.insertImage(this.getContentResolver(), file.getAbsolutePath(), bitName, null);}}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}// 发送广播,通知刷新图库的显示this.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fileName)));}

以上就是保存图片到相册的方式,代码写在Activity类中,而我们只要稍微封装一下这些代码到你的ImageUtil 或者 FileUtil那样类里面,你就可以方便地运用到你的项目中了,这里我就不封装了。

Android 保存图片到手机相册相关推荐

  1. android 保存图片到手机相册,并通知相册刷新

    保存图片到相册 项目中我们经常用到,将图片保存至手机相册,并通知相册及时刷新,展示图片. 只需将代码复制至图片工具类,直接使用即可: /*** 保存图片到图库* @param context* @pa ...

  2. Android保存图片到手机相册(res下的图片,网络图片都可以)

    今天主要说的是把图片保存到本地相册, 一.主要思路: 将一张图片,无论是本地图片还是网络图片先转成Bitmap格式,再调用方法保存到相册中 二.开发过程中可能会遇到的问题: 1:保存成功了,但图库不显 ...

  3. 小程序 — 保存图片到手机相册①

    讲一下在微信小程序中,怎么把网络图片保存到本机相册中:这个功能其实在小程序开发中还是很常见的,比如保存海报之类的等等. GitHub:https://github.com/Ewall1106/mini ...

  4. 微信小程序例子-保存图片到手机相册

    1.效果展示 2.关键代码 1)WXML文件 保存图片到手机相册 2)JS文件 var IMG_URL =''//图片链接 https开头 Page({ data:{ img_url:IMG_URL ...

  5. android 6.0获取图片地址,Android应用开发Android 保存图片到系统相册(三星6.0有效)...

    Android   保存图片到系统相册(三星6.0有效).今天要做一个保存图片到系统图库的功能,自身能力较浅,所以只能搜索了但发现网上的方法有几处bug,所以自己总结一下防止以后忘掉也想和大家分享一下 ...

  6. 小程序 — 保存图片到手机相册②(用户授权等)

    前言:上章基本实现保存图片到手机相册的功能了,但是还有这么几个问题没有解决,本章解决这几个问题. GitHub:https://github.com/Ewall1106/miniProgramDemo ...

  7. 保存图片到手机相册,并通知图库更新

    /*** 保存图片到手机相册,并通知图库更新* @param bmp 图片bitmap*/public static boolean saveImageToGallery(Context contex ...

  8. android 系统相册 多远,【系统相册】Android 保存图片到系统相册

    保存完图片后,可以在内存设备的文件系统相册目录下看到对应图片(以小米手机为例,系统相册的路径为:/storage/emulated/0/DCIM/Camera).但是,使用系统图库无法马上看到该图片, ...

  9. Android保存图片到系统相册

    先说一下思路,我是这样做的,先保存一张图片到可写路径下,用cocos2d的节点截屏功能,保存之后就可以 保存Bitmap到本地指定路径下 ,然后通过广播,通知系统相册图库刷新数据. 先说如何节点截屏: ...

最新文章

  1. laravel mysql like_Laravel数据库查询中对 like 的值进行转义
  2. linux 查找 jdk 安装路径
  3. Android应用坐标系统全面详解
  4. oracle性能优化总结
  5. 如何设计一门语言(八)——异步编程和CPS变换
  6. 专注力 化繁为简的惊人力量
  7. SAP UI5 应用开发教程之八 - 多语言的支持
  8. Android开发之Mac配置环境变量
  9. 图片导入ppt后模糊_PPT设计,找图也是一种能力
  10. 超标量、超级流水线、超长指令字、向量机 SIMD
  11. opencv-python单目视觉标定,简单易用。
  12. halcon模板匹配干扰边缘消除办法(最硬核方式)
  13. git服务器文件同步,利用git让服务器网站与本地同步 ssh配置
  14. java string contains indexof,java.lang.String.contains()方法实例
  15. 【CCCC】L2-023 图着色问题 (25分),,图的染色判定,遍历
  16. Java中将16进制字符串转换成汉字
  17. Quartz.Net进阶之三:SimpleTrigger详述
  18. android模拟器模拟nfc功能吗,android – 开始使用NFC模拟器
  19. 可靠性标准: TL9000
  20. uunp身形_20个使您身形良好的网站

热门文章

  1. PTA R7-2 福到了 (15分)
  2. 浅谈网址导航网站的成功推广方案大揭秘
  3. SPSS(六)SPSS之回归分析衍生方法(图文+数据集)
  4. Photoshop制作腐蚀金属块上的镂空…
  5. glc四驱软件测试,四条腿一定跑得快?新款奔驰GLC四驱系统可不答应?
  6. 收据找不到怎么退押金_押金条丢了,怎么才能要回押金
  7. SDN学习之路——第四天
  8. open()—打开文件函数
  9. 自定义相机Camera,相机/视频实时滤镜 - android
  10. android后台进程常驻,android 后台常驻,不会被kill