当前位置: 首页 > 编程笔记 >

Android编程实现保存图片到系统图库的方法示例

伯俊弼
2023-03-14
本文向大家介绍Android编程实现保存图片到系统图库的方法示例,包括了Android编程实现保存图片到系统图库的方法示例的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Android编程实现保存图片到系统图库的方法。分享给大家供大家参考,具体如下:

最近有些用户反映保存图片之后在系统图库找不到保存的图片,遂决定彻底查看并解决下。

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

第一种是自己写方法,如下代码:

public static File saveImage(Bitmap bmp) {
  File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
  if (!appDir.exists()) {
    appDir.mkdir();
  }
  String fileName = System.currentTimeMillis() + ".jpg";
  File file = new File(appDir, fileName);
  try {
    FileOutputStream fos = new FileOutputStream(file);
    bmp.compress(CompressFormat.JPEG, 100, fos);
    fos.flush();
    fos.close();
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
  }
}

以上代码便是将Bitmap保存图片到指定的路径/sdcard/Boohee/下,文件名以当前系统时间命名,但是这种方法保存的图片没有加入到系统图库中

第二种是调用系统提供的插入图库的方法:

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

调用以上系统自带的方法会把bitmap对象保存到系统图库中,但是这种方法无法指定保存的路径和名称,上述方法的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("/sdcard/Boohee/image.jpg"))););

或者还有如下方法:

final MediaScannerConnection msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {
  public void onMediaScannerConnected() {
    msc.scanFile("/sdcard/Boohee/image.jpg", "image/jpeg");
  }
  public void onScanCompleted(String path, Uri uri) {
    Log.v(TAG, "scan completed");
    msc.disconnect();
  }
});

上面代码的图片路径不管是通过自己写方法还是系统插入图库的方法都可以很容易的获取到。

终极完美解决方案

那么到这里可能有人又会问了,如果我想把图片保存到指定的文件夹,同时又需要图片出现在图库里呢?答案是可以的,sdk还提供了这样一个方法:

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

上述方法的第二个参数是image path,这样的话就有思路了,首先自己写方法把图片指定到指定的文件夹,然后调用上述方法把刚保存的图片路径传入进去,最后通知图库更新。

所以写了一个方法,完整的代码如下:

public static void saveImageToGallery(Context context, Bitmap bmp) {
  // 首先保存图片
  File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
  if (!appDir.exists()) {
    appDir.mkdir();
  }
  String fileName = System.currentTimeMillis() + ".jpg";
  File file = new File(appDir, fileName);
  try {
    FileOutputStream fos = new FileOutputStream(file);
    bmp.compress(CompressFormat.JPEG, 100, fos);
    fos.flush();
    fos.close();
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  } catch (IOException e) {
    e.printStackTrace();
 }
  // 其次把文件插入到系统图库
  try {
    MediaStore.Images.Media.insertImage(context.getContentResolver(),
  file.getAbsolutePath(), fileName, null);
  } catch (FileNotFoundException e) {
    e.printStackTrace();
  }
  // 最后通知图库更新
  context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
}

希望本文所述对大家Android程序设计有所帮助。

 类似资料:
  • 本文向大家介绍android编程实现系统图片剪裁的方法,包括了android编程实现系统图片剪裁的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了android编程实现系统图片剪裁的方法。分享给大家供大家参考,具体如下: 希望本文所述对大家Android程序设计有所帮助。

  • 本文向大家介绍android编程实现图片库的封装方法,包括了android编程实现图片库的封装方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了android编程实现图片库的封装方法。分享给大家供大家参考,具体如下: 大家在做安卓应用的时候 经常要从网络中获取图片 都是通过URL去获取 可是如果本地有图片数据 从本地获取数据不更加快一些 自己在工作中遇到这个问题 所以采用了一个URL和本

  • 本文向大家介绍php实现上传图片保存到数据库的方法,包括了php实现上传图片保存到数据库的方法的使用技巧和注意事项,需要的朋友参考一下 php实现上传图片保存到数据库的方法。分享给大家供大家参考。具体分析如下: php 上传图片,一般都使用move_uploaded_file方法保存在服务器上。但如果一个网站有多台服务器,就需要把图片发布到所有的服务器上才能正常使用(使用图片服务器的除外) 如果把

  • 本文向大家介绍PHP实现下载远程图片保存到本地的方法,包括了PHP实现下载远程图片保存到本地的方法的使用技巧和注意事项,需要的朋友参考一下 在使用 PHP 做简单的爬虫的时候,我们经常会遇到需要下载远程图片的需求,所以下面来简单实现这个需求。 1.使用 curl 比如我们有下面这两张图片: 第一步,我们可以直接来使用最简单的代码实现: 那在下载远程图片的时候就可以这样: 2.封装一个类 缕清思路之

  • 本文向大家介绍Android编程实现图片拍照剪裁的方法,包括了Android编程实现图片拍照剪裁的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android实现图片拍照剪裁的方法。分享给大家供大家参考,具体如下: 调用系统的裁剪工具对相册或者拍照的图片进行裁剪。 startActivityforResult用的很恰当,一些系统action需要注意。 XML文件: 希望本文所述对大家

  • 本文向大家介绍Android编程实现图片平铺的方法分析,包括了Android编程实现图片平铺的方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现图片平铺的方法。分享给大家供大家参考,具体如下: 1)第一种利用系统提供的api实现 2)第二种我们使用xml来轻松实现 3)第三种自己画出来 希望本文所述对大家Android程序设计有所帮助。

  • 本文向大家介绍Android 保存WebView中的图片示例,包括了Android 保存WebView中的图片示例的使用技巧和注意事项,需要的朋友参考一下 前言 项目中有需求在APP的Webview中长按图片可以保存。后来就去研究一下该怎么实现,顺便整理了一下。 WebView基本配置 注册ContextMenu 重写下面的方法即可保存图片 需要添加相关权限 这样就可以实现在Webview中长按图

  • 本文向大家介绍Android编程实现手绘及保存为图片的方法(附demo源码下载),包括了Android编程实现手绘及保存为图片的方法(附demo源码下载)的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Android编程实现手绘及保存为图片的方法。分享给大家供大家参考,具体如下: 运行效果图预览: 应 yzuo_08 要求做了此Demo,跟以前那个手写板Demo不同的是可以将画布的内容保存