From 80f2ca2df62ff1cd03046864af504245be078eb2 Mon Sep 17 00:00:00 2001
From: wjc <1243177876@qq.com>
Date: 星期四, 05 六月 2025 10:37:28 +0800
Subject: [PATCH] 2025年06月05日10:37:26

---
 app/src/main/java/com/hdl/photovoltaic/widget/popupview/CameraAlbumPopWindow.java |  133 +++++++++++++++++++++++++++-----------------
 1 files changed, 81 insertions(+), 52 deletions(-)

diff --git a/app/src/main/java/com/hdl/photovoltaic/widget/popupview/CameraAlbumPopWindow.java b/app/src/main/java/com/hdl/photovoltaic/widget/popupview/CameraAlbumPopWindow.java
index 23138e3..cfcdf76 100644
--- a/app/src/main/java/com/hdl/photovoltaic/widget/popupview/CameraAlbumPopWindow.java
+++ b/app/src/main/java/com/hdl/photovoltaic/widget/popupview/CameraAlbumPopWindow.java
@@ -17,6 +17,7 @@
 import android.os.Environment;
 import android.provider.DocumentsContract;
 import android.provider.MediaStore;
+import android.provider.Settings;
 import android.text.TextUtils;
 import android.view.LayoutInflater;
 import android.view.MotionEvent;
@@ -26,11 +27,14 @@
 import android.widget.RelativeLayout;
 import android.widget.TextView;
 
+import androidx.core.content.FileProvider;
+
 import com.hdl.photovoltaic.R;
 import com.hdl.photovoltaic.other.HdlDialogLogic;
 import com.hdl.photovoltaic.other.HdlThreadLogic;
 import com.hdl.photovoltaic.utils.PermissionUtils;
 import com.hdl.photovoltaic.utils.SharedPreUtils;
+import com.hdl.photovoltaic.widget.PermissionExplanationDialog;
 import com.hjq.permissions.OnPermissionCallback;
 import com.hjq.permissions.XXPermissions;
 
@@ -99,10 +103,12 @@
      */
     private void checkPermission_After(final Activity context, final int tag) {
         String permission = Manifest.permission.CAMERA;
+        // 鏈巿鏉� 濡傛灉搴旂敤绋嬪簭娌℃湁鎵�闇�鐨勬潈闄愶紝鍒欐樉绀鸿В閲婅鏄�
+        PermissionExplanationDialog.getInstance().showPortConflictPdDialog(context, context.getString(R.string.camera_storage_instructions), context.getString(R.string.camera_storage_purpose));
         int status = PermissionUtils.getPermissionState(context, permission);
-
         switch (status) {
             case PermissionUtils.STATUS_SUCCESS:
+                PermissionExplanationDialog.getInstance().dismiss();
                 dismiss();
                 if (0 == tag) {
                     take_photo();
@@ -117,6 +123,7 @@
                         .request(new OnPermissionCallback() {
                             @Override
                             public void onGranted(List<String> permissions, boolean all) {
+                                PermissionExplanationDialog.getInstance().dismiss();
                                 dismiss();
                                 SharedPreUtils.putBoolean(permission, true);
                                 if (0 == tag) {
@@ -128,12 +135,14 @@
 
                             @Override
                             public void onDenied(List<String> permissions, boolean never) {
+                                PermissionExplanationDialog.getInstance().dismiss();
                                 dismiss();
                                 SharedPreUtils.putBoolean(permission, true);
                             }
                         });
                 break;
             case PermissionUtils.STATUS_REFUSE_PERMANENT:
+                PermissionExplanationDialog.getInstance().dismiss();
 //                HdlThreadLogic.toast(mContext, R.string.permission_open);
                 HdlDialogLogic.getInstance().showSettingPermissionDialog(mContext);
                 break;
@@ -202,32 +211,46 @@
      * 鎷嶇収鑾峰彇鍥剧墖
      **/
     private void take_photo() {
-        //鑾峰彇绯荤当鐗堟湰
-        int currentapiVersion = Build.VERSION.SDK_INT;
-        // 婵�娲荤浉鏈�
-        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
-        // 鍒ゆ柇瀛樺偍鍗℃槸鍚﹀彲浠ョ敤锛屽彲鐢ㄨ繘琛屽瓨鍌�
-        SimpleDateFormat timeStampFormat = new SimpleDateFormat(
-                "yyyy_MM_dd_HH_mm_ss", Locale.ENGLISH);
-        String filename = timeStampFormat.format(new Date());
-        outputImagepath = new File(hdl_Dir,
-                filename + ".jpg");
-        if (currentapiVersion < 24) {
-            // 浠庢枃浠朵腑鍒涘缓uri
-            Uri uri = Uri.fromFile(outputImagepath);
-            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
-        } else {
-            //鍏煎android7.0 浣跨敤鍏变韩鏂囦欢鐨勫舰寮�
-            ContentValues contentValues = new ContentValues(1);
-            contentValues.put(MediaStore.Images.Media.DATA, outputImagepath.getAbsolutePath());
-            Uri uri = mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
-            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
-//                Uri photoURI= FileProvider.getUriForFile(mContext,"com.hdl.debugtreasure.dc.fileprovider",outputImagepath);
+        try {
+            //鑾峰彇绯荤当鐗堟湰
+            int currentapiVersion = Build.VERSION.SDK_INT;
+            // 婵�娲荤浉鏈�
+            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
+            // 鍒ゆ柇瀛樺偍鍗℃槸鍚﹀彲浠ョ敤锛屽彲鐢ㄨ繘琛屽瓨鍌�
+            SimpleDateFormat timeStampFormat = new SimpleDateFormat(
+                    "yyyy_MM_dd_HH_mm_ss", Locale.ENGLISH);
+            String filename = timeStampFormat.format(new Date());
+            outputImagepath = new File(hdl_Dir,
+                    filename + ".jpg");
+            if (currentapiVersion < 24) {
+                // 浠庢枃浠朵腑鍒涘缓uri
+                Uri uri = Uri.fromFile(outputImagepath);
+                intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+            } else {
+//                //鍏煎android7.0 浣跨敤鍏变韩鏂囦欢鐨勫舰寮�
+//                ContentValues contentValues = new ContentValues(1);
+//                contentValues.put(MediaStore.Images.Media.DATA, outputImagepath.getAbsolutePath());
+//                Uri uri = mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
+//                intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+//                Uri photoURI = FileProvider.getUriForFile(mContext, "com.hdl.photovoltaic.dc.fileprovider", outputImagepath);
 //                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
-//                intent.putExtra(MediaStore.EXTRA_OUTPUT,photoURI);
+//                intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
+
+                //鍏煎android7.0 浣跨敤鍏变韩鏂囦欢鐨勫舰寮�
+                ContentValues contentValues = new ContentValues(1);
+                contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, outputImagepath.getName());
+                contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
+                Uri uri = mContext.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
+                intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
+                Uri photoURI = FileProvider.getUriForFile(mContext, "com.hdl.photovoltaic.fileProvider", outputImagepath);
+                intent.addFlags(Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
+                intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
+            }
+            // 寮�鍚竴涓甫鏈夎繑鍥炲�肩殑Activity锛岃姹傜爜涓篜HOTO_REQUEST_CAREMA
+            ((Activity) mContext).startActivityForResult(intent, TAKE_PHOTO);
+        } catch (Exception e) {
+            HdlThreadLogic.toast(mContext, R.string.loading_not_supported);
         }
-        // 寮�鍚竴涓甫鏈夎繑鍥炲�肩殑Activity锛岃姹傜爜涓篜HOTO_REQUEST_CAREMA
-        ((Activity) mContext).startActivityForResult(intent, TAKE_PHOTO);
 
     }
 
@@ -239,12 +262,15 @@
             HdlThreadLogic.toast(mContext, R.string.camera_album_file_save_fial);
         } else {
             if (!TextUtils.isEmpty(outputImagepath.getAbsolutePath())) {
+                //娉ㄦ剰锛�(android13,14闇�瑕佸啀璁剧疆-闅愮-)鐗规畩鏉冮檺璁剧疆
                 orc_bitmap = BitmapFactory.decodeFile(outputImagepath.getAbsolutePath());//鑾峰彇鍥剧墖
                 saveBitmap(comp(ImgUpdateDirection(outputImagepath.getAbsolutePath()))); //鍘嬬缉鍥剧墖
             } else {
                 HdlThreadLogic.toast(mContext, R.string.camera_album_file_get_fial);
             }
         }
+
+
     }
 
     /**
@@ -414,34 +440,39 @@
      * 浠庣浉鍐屼腑鑾峰彇鍥剧墖
      */
     private void select_photo() {
-        String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
-        int status = PermissionUtils.getPermissionState(mContext, permission);
 
-        switch (status) {
-            case PermissionUtils.STATUS_SUCCESS:
-                openAlbum();
-                break;
-            case PermissionUtils.STATUS_REFUSE:
-            case PermissionUtils.STATUS_DEFAULT:
-                XXPermissions.with(mContext)
-                        .permission(permission)
-                        .request(new OnPermissionCallback() {
-                            @Override
-                            public void onGranted(List<String> permissions, boolean all) {
-                                SharedPreUtils.putBoolean(permission, true);
-                                openAlbum();
-                            }
+        if (Build.VERSION.SDK_INT >= 33) {
+            //榛樿鎴愬姛
+            openAlbum();
+        } else {
+            String permission = Manifest.permission.WRITE_EXTERNAL_STORAGE;
+            int status = PermissionUtils.getPermissionState(mContext, permission);
+            switch (status) {
+                case PermissionUtils.STATUS_SUCCESS:
+                    openAlbum();
+                    break;
+                case PermissionUtils.STATUS_REFUSE:
+                case PermissionUtils.STATUS_DEFAULT:
+                    XXPermissions.with(mContext)
+                            .permission(permission)
+                            .request(new OnPermissionCallback() {
+                                @Override
+                                public void onGranted(List<String> permissions, boolean all) {
+                                    SharedPreUtils.putBoolean(permission, true);
+                                    openAlbum();
+                                }
 
-                            @Override
-                            public void onDenied(List<String> permissions, boolean never) {
-                                SharedPreUtils.putBoolean(permission, true);
-                            }
-                        });
-                break;
-            case PermissionUtils.STATUS_REFUSE_PERMANENT:
+                                @Override
+                                public void onDenied(List<String> permissions, boolean never) {
+                                    SharedPreUtils.putBoolean(permission, true);
+                                }
+                            });
+                    break;
+                case PermissionUtils.STATUS_REFUSE_PERMANENT:
 //                HdlThreadLogic.toast(mContext, R.string.permission_open);
-                HdlDialogLogic.getInstance().showSettingPermissionDialog(mContext);
-                break;
+                    HdlDialogLogic.getInstance().showSettingPermissionDialog(mContext);
+                    break;
+            }
         }
     }
 
@@ -530,8 +561,6 @@
     public interface CameraAlbumListener {
         void successCallBack(File a);
     }
-
-
 
 
 }

--
Gitblit v1.8.0