Android——将图片加入到系统相册里面
来源:互联网 发布:蓝宝石之谜 知乎 编辑:程序博客网 时间:2024/06/06 04:43
Adnroid中保存图片的方法可能有如下两种:
- 第一种是自己写方法,如下代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"))););
或者还有如下方法:
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还提供了这样一个方法:
1
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)));}
原博客地址:http://stormzhang.github.io/android/2014/07/24/android-save-image-to-gallery/
阅读全文
0 0
- Android——将图片加入到系统相册里面
- (4.3.2.15)Android——将图片加入到系统相册里面
- 将图片保存到系统相册
- Android-实时将下载图片加入相册中
- 【系统相册】Android 保存图片到系统相册
- android 图片保存到系统相册,且将插入图片排序最前
- 如何将Tomcat加入到系统服务里面
- Android 保存图片到系统相册
- Android保存图片到系统相册
- Android保存图片到系统相册
- android调用系统相册将图片复制到指定目录下并显示复制进度
- 将图片保存到系统相册的两种方法
- 将图片保存到系统相册的两种方法
- 将图片保存到相册
- 将图片保存到相册
- 将图片保存到相册
- 将图片导入系统相册
- Android将手机相册图片展示到GridView中
- UVA 10943 How do you add?——背包
- Rxjava
- OpenLayers 3 自定义坐标系
- 如何提升自己,对自己的未来一年的规划
- 【Hbase】建表命令
- Android——将图片加入到系统相册里面
- 构建WEB应用,java与php哪个更合适
- Qt悬浮滚动条-让滚动条不再占用控件的大小
- 一个智能指针的简单实现
- 嵌入式控制器分布式控制系统固件更新方式探讨
- 简单搭建springboot
- SecondaryNameNode异常排查
- 用pywin32实现windows模拟鼠标及键盘动作
- Kotlin学习(二)—— 基本语法,函数,变量,字符串模板,条件表达式,null,类型检测,for,while,when,区间,集合