Android开发实现保存图片到手机相册功能
本文实例讲述了android开发实现保存图片到手机相册功能。分享给大家供大家参考,具体如下:
有一种很常见的需求,当保存图片的时候,客户需要在相册里面看到那张图片。有时候确实是保存成功了(通过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 、oppo filename = 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相关内容感兴趣的读者可查看本站专题:《android图形与图像处理技巧总结》、《android开发入门与进阶教程》、《android调试技巧与常见问题解决方法汇总》、《android基本组件用法总结》、《android视图view技巧总结》、《android布局layout技巧总结》及《android控件用法总结》
希望本文所述对大家android程序设计有所帮助。
下一篇: 注册表的禁用与解锁方法集合