github地址:(完整demo,欢迎下载)
https://github.com/zhouxu88/SaveImgToGallery/tree/master

Adnroid中保存图片的方法可能有如下两种:

  • 第一种是调用系统提供的插入图库的方法:
    MediaStore.Images.Media.insertImage(getContentResolver(), bitmap, "title", "description");
    调用以上系统自带的方法会把bitmap对象保存到系统图库中,但是这种方法无法指定保存的路径和名称,上述方法的title、description参数只是插入数据库中的字段,真实的图片名称系统会自动分配。

或者

MediaStore.Images.Media.insertImage(getContentResolver(), "image path", "title", "description");

但是发现,还是不能在相册中查看已经保存到的图片,结果发现需要刷新系统图库

  • 更新系统图库的方法
    sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));
    上面那条广播是扫描整个sd卡的广播,如果你sd卡里面东西很多会扫描很久,在扫描当中我们是不能访问sd卡,所以这样子用户体现很不好,所以下面我们还有如下的方法:
sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("your path"))););

完整代码

  • 1、保存Bitmap到本地指定路径下
  • 2、通过广播,通知系统相册图库刷新数据
public class ImgUtils {    //保存文件到指定路径    public static boolean saveImageToGallery(Context context, Bitmap bmp) {        // 首先保存图片        String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "dearxy";        File appDir = new File(storePath);        if (!appDir.exists()) {            appDir.mkdir();        }        String fileName = System.currentTimeMillis() + ".jpg";        File file = new File(appDir, fileName);        try {            FileOutputStream fos = new FileOutputStream(file);            //通过io流的方式来压缩保存图片            boolean isSuccess = bmp.compress(Bitmap.CompressFormat.JPEG, 60, fos);            fos.flush();            fos.close();            //把文件插入到系统图库            //MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);            //保存图片后发送广播通知更新数据库            Uri uri = Uri.fromFile(file);            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));            if (isSuccess) {                return true;            } else {                return false;            }        } catch (IOException e) {            e.printStackTrace();        }        return false;    }}

注意:
1、别忘了权限

    

2、如果是6.0手机,记得先申请权限,拿到权限后,再保存,不然会失败。



作者:陪你唠嗑
链接:http://www.jianshu.com/p/8cede074ba5b
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

更多相关文章

  1. android Log.isLoggable方法的使用
  2. Android 软件盘弹出时把顶部局顶上去的解决方法
  3. 友盟推送android 8.0系统不显示推送消息问题
  4. android的singleInstance启动模式及方法调用
  5. Android 中数据库查询方法 query() 中的 selectionArgs 的用法
  6. Android Wifi子系统源代码View
  7. Android中设置中文粗体的方法
  8. RelativeLayout相对布局方法总结
  9. Android系统权限和root权限大全

随机推荐

  1. Android媒体的一些使用总结
  2. EditText 设置 imeOptions 无效问题
  3. android面试题总结
  4. Android使用SQlite数据库
  5. 一分钟让你实现Android微信分享功能
  6. Android面试系列文章2018之Android部分In
  7. Android自动化测试工具——Monkey
  8. Android(安卓)音频系统(二)之 AudioFlinger
  9. 《Android面试宝典》学习笔记(第一章:andro
  10. android中Button背景渐变效果和点击效果