From 444aedf9d9917684df387f2b0903441c7aaa9ec4 Mon Sep 17 00:00:00 2001 From: montessorinotes Date: Mon, 18 Nov 2019 16:05:09 +0800 Subject: [PATCH] =?UTF-8?q?Q=20=E4=B8=8A=E4=BD=BF=E7=94=A8MediaStore=20?= =?UTF-8?q?=E5=AD=98=E5=82=A8=E7=85=A7=E7=89=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../internal/utils/MediaStoreCompat.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/matisse/src/main/java/com/zhihu/matisse/internal/utils/MediaStoreCompat.java b/matisse/src/main/java/com/zhihu/matisse/internal/utils/MediaStoreCompat.java index 592c77ea6..e275bdc3e 100644 --- a/matisse/src/main/java/com/zhihu/matisse/internal/utils/MediaStoreCompat.java +++ b/matisse/src/main/java/com/zhihu/matisse/internal/utils/MediaStoreCompat.java @@ -16,6 +16,8 @@ package com.zhihu.matisse.internal.utils; import android.app.Activity; +import android.content.ContentResolver; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; @@ -24,6 +26,7 @@ import android.os.Build; import android.os.Environment; import android.provider.MediaStore; + import androidx.fragment.app.Fragment; import androidx.core.content.FileProvider; import androidx.core.os.EnvironmentCompat; @@ -42,9 +45,9 @@ public class MediaStoreCompat { private final WeakReference mContext; private final WeakReference mFragment; - private CaptureStrategy mCaptureStrategy; - private Uri mCurrentPhotoUri; - private String mCurrentPhotoPath; + private CaptureStrategy mCaptureStrategy; + private Uri mCurrentPhotoUri; + private String mCurrentPhotoPath; public MediaStoreCompat(Activity activity) { mContext = new WeakReference<>(activity); @@ -85,8 +88,25 @@ public void dispatchCaptureIntent(Context context, int requestCode) { mCurrentPhotoPath = photoFile.getAbsolutePath(); mCurrentPhotoUri = FileProvider.getUriForFile(mContext.get(), mCaptureStrategy.authority, photoFile); + + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + ContentValues values = new ContentValues(); + values.put(MediaStore.Images.Media.DISPLAY_NAME, photoFile.getName()); + values.put(MediaStore.Images.Media.MIME_TYPE, "image/*"); + + if (mCaptureStrategy.directory != null) { + values.put(MediaStore.Images.Media.RELATIVE_PATH, Environment.DIRECTORY_PICTURES + "/" + mCaptureStrategy.directory); + } + + ContentResolver contentResolver = context.getContentResolver(); + mCurrentPhotoUri = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values); + + } else { + mCurrentPhotoUri = FileProvider.getUriForFile(mContext.get(), + mCaptureStrategy.authority, photoFile); + captureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); + } captureIntent.putExtra(MediaStore.EXTRA_OUTPUT, mCurrentPhotoUri); - captureIntent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { List resInfoList = context.getPackageManager() .queryIntentActivities(captureIntent, PackageManager.MATCH_DEFAULT_ONLY);