当前位置:   article > 正文

Android保存图片到自定义文件夹并展示在系统图库_在android studio中怎么将图片保存到指定文件夹

在android studio中怎么将图片保存到指定文件夹

经过自己整理,思路来自 stormzhang 的博文


目的是将图片保存到自定义目录下,并在系统图库中展示


一、保存图片到自定义路径

通常情况下,我们对保存图片的处理是这样的:

  1. public static File saveImage(Bitmap bmp) {
  2. File appDir = new File(Environment.getExternalStorageDirectory(), "SelfDefine");
  3. if (!appDir.exists()) {
  4. appDir.mkdir(); //创建文件夹
  5. }
  6. String fileName = System.currentTimeMillis() + ".jpg"; //需要的图片格式
  7. File file = new File(appDir, fileName);
  8. try {
  9. FileOutputStream fos = new FileOutputStream(file); //获取文件流
  10. bmp.compress(CompressFormat.JPEG, 100, fos); //保存成图片
  11. fos.flush();
  12. fos.close();
  13. } catch (FileNotFoundException e) {
  14. e.printStackTrace();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. }

这样,图片就被保存到了/sdcard/SelfDefine/路径下了



二、将图片插入系统图库并更新

<code class="language-ruby" data-lang="ruby"><span class="no">MediaStore</span><span class="o">.</span><span class="n">Images</span><span class="o">.</span><span class="n">Media</span><span class="o">.</span><span class="n">insertImage</span><span class="p">(</span><span class="n">getContentResolver</span><span class="p">(),</span> <span class="n">bitmap</span><span class="p">,</span> <span class="s2">"title"</span><span class="p">,</span> <span class="s2">"description"</span><span class="p">);</span></code>
这样就可以通过android系统提供的一个多媒体数据库类:MediaStore,把bitmap图片插入到系统图库中,但是无法指定保存的路径和名称,参数title、description参数只是插入数据库中的字段,真实的图片名称系统会自动分配。


MediaStore.Images.Media.insertImage(getContentResolver(), "image path", "title", "description");
此方法是可以制定目录的,符合我们自定义的要求。


注意,以上方法不会更新图库,需要手工再去更新图库,才可以将图片显示在图库中。


更新图库方法如下:

1、广播扫描SD卡,扫描中不能访问SD卡,体验不好

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri.parse("file://"+ Environment.getExternalStorageDirectory())));

2、扫描指定文件

sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.fromFile(new File("/sdcard/SelfDefine/image.jpg"))););

3、重写MedisScannerConnectionClient类的 onMediaScannerConnected() onScanCompleted

  1. final MediaScannerConnection msc = new MediaScannerConnection(mContext, new MediaScannerConnectionClient() {
  2. public void onMediaScannerConnected() {
  3. msc.scanFile("/sdcard/SelfDefine/image.jpg", "image/jpg");
  4. }
  5. public void onScanCompleted(String path, Uri uri) {
  6. Log.v(TAG, "scan completed");
  7. msc.disconnect();
  8. }
  9. });



三、两者结合的终极方法

  1. public static void saveImageToGallery(Context context, Bitmap bmp) {
  2. // 首先保存图片
  3. File appDir = new File(Environment.getExternalStorageDirectory(), "Boohee");
  4. if (!appDir.exists()) {
  5. appDir.mkdir();
  6. }
  7. String fileName = System.currentTimeMillis() + ".jpg";
  8. File file = new File(appDir, fileName);
  9. try {
  10. FileOutputStream fos = new FileOutputStream(file);
  11. bmp.compress(CompressFormat.JPEG, 100, fos);
  12. fos.flush();
  13. fos.close();
  14. } catch (FileNotFoundException e) {
  15. e.printStackTrace();
  16. } catch (IOException e) {
  17. e.printStackTrace();
  18. }
  19. // 其次把文件插入到系统图库
  20. try {
  21. MediaStore.Images.Media.insertImage(context.getContentResolver(),
  22. file.getAbsolutePath(), fileName, null);
  23. } catch (FileNotFoundException e) {
  24. e.printStackTrace();
  25. }
  26. // 最后通知图库更新
  27. context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path)));
  28. }






声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/381096
推荐阅读
相关标签
  

闽ICP备14008679号