乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      Android 保存圖片到本地 兼容Android 10+

       hncdman 2022-05-08 發(fā)布于湖南省


      Android 保存圖片到本地(兼容Android 10+)

      圖片保存在 DCIM 公開目錄

      大于 28 需使用 MediaStore

      小于 29 直接 new FIle

      public class ImageSaveUtil {

          /**

           * 保存圖片到公共目錄

           * 29 以下,需要提前申請(qǐng)文件讀寫權(quán)限

           * 29及29以上的,不需要權(quán)限

           * 保存的文件在 DCIM 目錄下

           *

           * @param context 上下文

           * @param bitmap  需要保存的bitmap

           * @param format  圖片格式

           * @param quality 壓縮的圖片質(zhì)量

           * @param recycle 完成以后,是否回收Bitmap,建議為true

           * @return 文件的 uri

           */

          @Nullable

          public static Uri saveAlbum(Context context, Bitmap bitmap, Bitmap.CompressFormat format, int quality, boolean recycle) {

              String suffix;

              if (Bitmap.CompressFormat.JPEG == format)

                  suffix = "JPG";

              else

                  suffix = format.name();

              String fileName = System.currentTimeMillis() + "_" + quality + "." + suffix;

              if (Build.VERSION.SDK_INT < 29) {

                  if (!isGranted(context)) {

                      Log.e("ImageUtils", "save to album need storage permission");

                      return null;

                  }

                  File picDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM);

                  File destFile = new File(picDir, fileName);

                  if (!save(bitmap, destFile, format, quality, recycle))

                      return null;

                  Uri uri = null;

                  if (destFile.exists()) {

                      uri = Uri.parse("file://" + destFile.getAbsolutePath());

                      Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

                      intent.setData(uri);

                      context.sendBroadcast(intent);

                  }

                  return uri;

              } else {

                  // Android 10 使用

                  Uri contentUri;

                  if (Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {

                      contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;

                  } else

                      contentUri = MediaStore.Images.Media.INTERNAL_CONTENT_URI;

                  ContentValues contentValues = new ContentValues();

                  contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);

                  contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/*");

                  contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_DCIM + "/");

                  // 告訴系統(tǒng),文件還未準(zhǔn)備好,暫時(shí)不對(duì)外暴露

                  contentValues.put(MediaStore.MediaColumns.IS_PENDING, 1);

                  Uri uri = context.getContentResolver().insert(contentUri, contentValues);

                  if (uri == null) return null;

                  OutputStream os = null;

                  try {

                      os = context.getContentResolver().openOutputStream(uri);

                      bitmap.compress(format, quality, os);

                      // 告訴系統(tǒng),文件準(zhǔn)備好了,可以提供給外部了

                      contentValues.clear();

                      contentValues.put(MediaStore.MediaColumns.IS_PENDING, 0);

                      context.getContentResolver().update(uri, contentValues, null, null);

                      return uri;

                  } catch (Exception e) {

                      e.printStackTrace();

                      // 失敗的時(shí)候,刪除此 uri 記錄

                      context.getContentResolver().delete(uri, null, null);

                      return null;

                  } finally {

                      try {

                          if (os != null)

                              os.close();

                      } catch (IOException e) {

                          // ignore

                      }

                  }

              }

          }

          private static boolean save(Bitmap bitmap, File file, Bitmap.CompressFormat format, int quality, boolean recycle) {

              if (isEmptyBitmap(bitmap)) {

                  Log.e("ImageUtils", "bitmap is empty.");

                  return false;

              }

              if (bitmap.isRecycled()) {

                  Log.e("ImageUtils", "bitmap is recycled.");

                  return false;

              }

              if (!createFile(file, true)) {

                  Log.e("ImageUtils", "create or delete file <$file> failed.");

                  return false;

              }

              OutputStream os = null;

              boolean ret = false;

              try {

                  os = new BufferedOutputStream(new FileOutputStream(file));

                  ret = bitmap.compress(format, quality, os);

                  if (recycle && !bitmap.isRecycled()) bitmap.recycle();

              } catch (IOException e) {

                  e.printStackTrace();

              } finally {

                  try {

                      if (os != null)

                          os.close();

                  } catch (IOException e) {

                      // ignore

                  }

              }

              return ret;

          }

          private static boolean isEmptyBitmap(Bitmap bitmap) {

              return bitmap == null || bitmap.isRecycled() || bitmap.getWidth() == 0 || bitmap.getHeight() == 0;

          }

          private static boolean createFile(File file, boolean isDeleteOldFile) {

              if (file == null) return false;

              if (file.exists()) {

                  if (isDeleteOldFile) {

                      if (!file.delete()) return false;

                  } else

                      return file.isFile();

              }

              if (!createDir(file.getParentFile())) return false;

              try {

                  return file.createNewFile();

              } catch (IOException e) {

                  return false;

              }

          }

          private static boolean createDir(File file) {

              if (file == null) return false;

              if (file.exists())

                  return file.isDirectory();

              else

                  return file.mkdirs();

          }

          private static boolean isGranted(Context context) {

              return (Build.VERSION.SDK_INT < Build.VERSION_CODES.M || PackageManager.PERMISSION_GRANTED == ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_EXTERNAL_STORAGE));

          }

      }

      ————————————————

      版權(quán)聲明:本文為CSDN博主「OneGreenHand」的原創(chuàng)文章,遵循CC 4.0 BY-SA版權(quán)協(xié)議,轉(zhuǎn)載請(qǐng)附上原文出處鏈接及本聲明。

      原文鏈接:https://blog.csdn.net/a295268305/article/details/108880706

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多