From b6e6f93f3ac283d00d8a039c14675badfe478baa Mon Sep 17 00:00:00 2001 From: Rajesh Kumar Mallah Date: Fri, 23 Jul 2021 10:59:08 +0530 Subject: [PATCH] using FileProvider for accessing files for imagePicker for android-N --- java/src/androidnative/ImagePicker.java | 7 +++++-- java/src/androidnative/Util.java | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/java/src/androidnative/ImagePicker.java b/java/src/androidnative/ImagePicker.java index 5d515f8..4420b98 100644 --- a/java/src/androidnative/ImagePicker.java +++ b/java/src/androidnative/ImagePicker.java @@ -16,6 +16,7 @@ import android.content.ClipData; import java.util.List; import java.util.ArrayList; +import androidx.core.content.FileProvider; public class ImagePicker { @@ -69,13 +70,16 @@ static void takePhoto(Map message) { broadcast = (Boolean) message.get("broadcast"); } + Activity activity = org.qtproject.qt5.android.QtNative.activity(); + String timeStamp = new SimpleDateFormat("yyyy-MM-dd HH.mm.ss").format(new Date()); File storageDir = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM); if(!storageDir.exists() && !storageDir.mkdir()) return; File image = new File(storageDir.getAbsolutePath() + "/" + timeStamp + ".jpg"); - mPhotoUri = Uri.fromFile(image); + String applicationId = (String) Util.getBuildConfigValue(activity, "APPLICATION_ID"); + mPhotoUri = FileProvider.getUriForFile(activity , applicationId + ".provider", image ); Log.d(TAG,"takePhoto : " + mPhotoUri); @@ -85,7 +89,6 @@ static void takePhoto(Map message) { intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION); - Activity activity = org.qtproject.qt5.android.QtNative.activity(); activity.startActivityForResult(intent,TAKE_PHOTO_ACTION); } diff --git a/java/src/androidnative/Util.java b/java/src/androidnative/Util.java index c8503ff..1c643fb 100644 --- a/java/src/androidnative/Util.java +++ b/java/src/androidnative/Util.java @@ -262,4 +262,20 @@ static void openGPSSettings() { Activity activity = org.qtproject.qt5.android.QtNative.activity(); activity.startActivity(intent); } + +// thanks: https://stackoverflow.com/questions/21365928/gradle-how-to-use-buildconfig-in-an-android-library-with-a-flag-that-gets-set + public static Object getBuildConfigValue(Context context, String fieldName) { + try { + Class clazz = Class.forName(context.getPackageName() + ".BuildConfig"); + Field field = clazz.getField(fieldName); + return field.get(null); + } catch (ClassNotFoundException e) { + e.printStackTrace(); + } catch (NoSuchFieldException e) { + e.printStackTrace(); + } catch (IllegalAccessException e) { + e.printStackTrace(); + } + return null; + } }