欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

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

程序员文章站 2022-04-11 09:13:40
本文实例讲述了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程序设计有所帮助。