当前位置: 代码迷 >> 综合 >> 兼容Android10 保存图片并更新图库
  详细解决方案

兼容Android10 保存图片并更新图库

热度:18   发布时间:2024-02-27 23:09:04.0

 

// 保存图片
public static Uri saveBitmap(Context context, Bitmap bitmap) throws IOException {File eFile = Environment.getExternalStorageDirectory();File mDirectory = new File(eFile.toString() + File.separator + context.getPackageName());if (!mDirectory.exists()) {mDirectory.mkdirs();}File imageFile = new File(mDirectory, "photo_" + System.currentTimeMillis() + ".jpg");FileOutputStream out;try {out = new FileOutputStream(imageFile);if (bitmap.compress(Bitmap.CompressFormat.PNG, 90, out)) {out.flush();out.close();}Uri uri = toUri(context,imageFile);updatePhotoAlbum(context,imageFile);//更新图库return uri;} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}return null;}/*** 兼容android 10* 更新图库* @param mContext* @param file*/public static void updatePhotoAlbum(Context mContext,File file) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {ContentValues values = new ContentValues();values.put(MediaStore.MediaColumns.DISPLAY_NAME, file.getName());values.put(MediaStore.MediaColumns.MIME_TYPE, getMimeType(file));values.put(MediaStore.MediaColumns.RELATIVE_PATH, Environment.DIRECTORY_DCIM);ContentResolver contentResolver = mContext.getContentResolver();Uri uri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);if (uri == null) {return;}try {OutputStream out = contentResolver.openOutputStream(uri);FileInputStream fis = new FileInputStream(file);FileUtils.copy(fis, out);fis.close();out.close();} catch (Exception e) {e.printStackTrace();}} else {MediaScannerConnection.scanFile(mContext.getApplicationContext(), new String[]{file.getAbsolutePath()}, new String[]{"image/jpeg"}, new MediaScannerConnection.OnScanCompletedListener() {@Overridepublic void onScanCompleted(String path, Uri uri) {}});}}public static String getMimeType(File file) {FileNameMap fileNameMap = URLConnection.getFileNameMap();String type = fileNameMap.getContentTypeFor(file.getName());return type;}