当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发实现保存图片到手机相册功能

Android开发实现保存图片到手机相册功能

2019年07月23日  | 移动技术网移动技术  | 我要评论

本文实例讲述了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程序设计有所帮助。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网