From 9c2908d8a110eaa28ec63a877291aeea61ee4e60 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期二, 03 十二月 2024 09:38:24 +0800
Subject: [PATCH] 优化自定义二次确认Dialog回调

---
 app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java |  128 ++++++++++++++++++++++++++++++++++++------
 1 files changed, 110 insertions(+), 18 deletions(-)

diff --git a/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java b/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java
index 80c5055..f2f6ef7 100644
--- a/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java
+++ b/app/src/main/java/com/dayu/pipirrapp/utils/MapJpgUtils.java
@@ -1,6 +1,11 @@
 package com.dayu.pipirrapp.utils;
 
-import android.content.Context;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.net.Uri;
+import android.util.Log;
+
+import com.dayu.pipirrapp.MyApplication;
 
 import java.io.File;
 import java.io.FileOutputStream;
@@ -8,6 +13,8 @@
 import java.io.OutputStream;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
+import java.util.HashMap;
+import java.util.Map;
 
 import okhttp3.ResponseBody;
 
@@ -18,14 +25,17 @@
  * 澶囨敞锛� 瀹屾垚鍦板浘缂撳瓨绛栫暐
  */
 public class MapJpgUtils {
-    static MapJpgUtils mapJpgUtils;
-    Context context;
+    static String TAG = "MapJpgUtils";
 
-    public static MapJpgUtils getInsatance(Context context) {
+    static MapJpgUtils mapJpgUtils;
+
+    String childName = "mapCache";
+    String fileType = ".jpg";
+
+    public static MapJpgUtils getInsatance() {
         if (mapJpgUtils == null) {
             mapJpgUtils = new MapJpgUtils();
         }
-        mapJpgUtils.context = context;
         return mapJpgUtils;
     }
 
@@ -33,7 +43,8 @@
     // 鑾峰彇缂撳瓨鐡︾墖鏂囦欢
     public File getCachedTile(String url) {
         String fileName = hashUrl(url);  // URL 杞崲涓哄敮涓�鐨勫搱甯屽�兼垨鏂囦欢鍚�
-        File cacheDir = new File(context.getCacheDir(), "mapCache");  // 鐡︾墖瀛樺偍鐩綍
+        String folderPath = extractTileInfoFromUrl(url);
+        File cacheDir = new File(MyApplication.myApplication.getCacheDir() + File.separator + childName + File.separator + folderPath);  // 鐡︾墖瀛樺偍鐩綍
         if (!cacheDir.exists()) {
             cacheDir.mkdirs();
         }
@@ -50,7 +61,7 @@
             for (byte b : hashBytes) {
                 sb.append(String.format("%02x", b));
             }
-            return sb.toString();
+            return sb.toString() + fileType;
         } catch (NoSuchAlgorithmException e) {
             e.printStackTrace();
             return String.valueOf(url.hashCode());
@@ -61,12 +72,13 @@
     public boolean saveTileToCache(String url, ResponseBody body) {
 
         try {
-            File tileFile = new File(context.getCacheDir() + File.separator + hashUrl(url) + ".png");
+            //浠� URL 涓彁鍙栫摝鐗囩殑 Z/X/Y 鍊�
+            String folderPath = extractTileInfoFromUrl(url);
 
+            File tileFile = new File(MyApplication.myApplication.getCacheDir() + File.separator + childName + File.separator + folderPath + File.separator + hashUrl(url));
             if (!tileFile.getParentFile().exists()) {
                 tileFile.getParentFile().mkdirs();
             }
-
             InputStream inputStream = null;
             OutputStream outputStream = null;
 
@@ -90,7 +102,25 @@
                 outputStream.flush();
                 // 淇濆瓨瀹屾垚鍚庯紝璁板綍缂撳瓨鍒涘缓鏃堕棿
                 tileFile.setLastModified(System.currentTimeMillis());
-                return true;
+                if (validateImageFile(tileFile)) {
+                    // 鏍¢獙涓嬭浇鏂囦欢澶у皬鍜屽疄闄呭ぇ灏忔槸鍚︿竴鑷�
+                    long actualFileSize = tileFile.length();
+                    if (fileSizeDownloaded == actualFileSize) {
+                        Log.d(TAG, "鏂囦欢澶у皬鍖归厤锛屼笅杞藉ぇ灏忥細" + fileSizeDownloaded + " 瀛楄妭锛屽疄闄呭ぇ灏忥細" + actualFileSize + " 瀛楄妭");
+                        return true;
+                    } else {
+                        //淇濆瓨澶辫触,鍒犻櫎鏂囦欢
+                        tileFile.delete();
+                        Log.e(TAG, "鏂囦欢澶у皬涓嶅尮閰嶏紝涓嬭浇澶у皬锛�" + fileSizeDownloaded + " 瀛楄妭锛屽疄闄呭ぇ灏忥細" + actualFileSize + " 瀛楄妭");
+                        return false;
+                    }
+                } else {
+                    //淇濆瓨澶辫触,鍒犻櫎鏂囦欢
+                    tileFile.delete();
+                    Log.d(TAG, "淇濆瓨澶辫触锛屾枃浠舵病鏈変繚瀛樺畬鏁�");
+                    return false;
+                }
+
             } catch (Exception e) {
                 return false;
             } finally {
@@ -114,7 +144,7 @@
      */
     public boolean isHasFiles(String url) {
         String fileName = hashUrl(url);  // URL 杞崲涓哄敮涓�鐨勫搱甯屽�兼垨鏂囦欢鍚�
-        File cacheDir = new File(context.getCacheDir(), "mapCache");  // 鐡︾墖瀛樺偍鐩綍
+        File cacheDir = new File(MyApplication.myApplication.getCacheDir(), "mapCache");  // 鐡︾墖瀛樺偍鐩綍
         if (!cacheDir.exists()) {
             cacheDir.mkdirs();
         }
@@ -131,20 +161,82 @@
         return (System.currentTimeMillis() - lastModified) > cacheValidity;
     }
 
-    // 娓呯悊鏃х紦瀛�
-    private void clearOldCacheFiles() {
-        File cacheDir = new File(context.getCacheDir(), "mapCache");
+    /**
+     * 鍒ゆ柇褰撳墠鏂囦欢鏄惁瀹屾暣
+     *
+     * @param url
+     * @return
+     */
+    public boolean isComplete(String url, long size) {
+        return false;
+    }
+
+    // 娓呯悊鎵�鏈夋棫缂撳瓨
+    public void clearOldCacheFiles() {
+        File cacheDir = new File(MyApplication.myApplication.getCacheDir(), "mapCache");
         if (cacheDir.exists()) {
             File[] files = cacheDir.listFiles();
             if (files != null) {
                 for (File file : files) {
-                    // 娓呯悊瓒呰繃 7 澶╃殑缂撳瓨鏂囦欢
-                    if (System.currentTimeMillis() - file.lastModified() > 7 * 24 * 60 * 60 * 1000) {
-                        file.delete();
-                    }
+                    file.delete();
                 }
             }
         }
     }
 
+    //娓呯悊鍗曚釜缂撳瓨
+    public void clearCacheFile(String url) {
+        File file = new File(MyApplication.myApplication.getCacheDir() + File.separator + childName + File.separator + hashUrl(url) + fileType);
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
+
+    // 鏍¢獙鍥剧墖鐨勫畬鏁存��
+    public boolean validateImageFile(File tileFile) {
+        if (!tileFile.exists()) {
+            // 鏂囦欢涓嶅瓨鍦紝瑙嗕负涓嶅畬鏁�
+            return false;
+        }
+        // 灏濊瘯瑙f瀽鍥惧儚
+        Bitmap bitmap = BitmapFactory.decodeFile(tileFile.getAbsolutePath());
+        if (bitmap != null) {
+            // 鍥惧儚瑙f瀽鎴愬姛锛屾枃浠跺畬鏁�
+            Log.d(TAG, "鍥惧儚瑙f瀽鎴愬姛锛屾枃浠跺畬鏁�");
+            // 瑙f瀽瀹屽浘鍍忓悗锛屾墜鍔ㄥ洖鏀禕itmap鐨勫唴瀛�
+            bitmap.recycle();
+            return true;
+        } else {
+            // 鍥惧儚瑙f瀽澶辫触锛屾枃浠朵笉瀹屾暣鎴栨崯鍧�
+            Log.e(TAG, "鍥惧儚瑙f瀽澶辫触锛屾枃浠朵笉瀹屾暣鎴栨崯鍧�");
+            return false;
+        }
+    }
+
+
+    /**
+     * 鍒ゆ柇璇锋眰鏄惁涓哄ぉ鍦板浘鐡︾墖
+     *
+     * @param url
+     * @return
+     */
+    public boolean isTianDiTuTileRequest(String url) {
+        return url.contains("tianditu.gov.cn") && url.contains("wmts") && url.contains("TILEMATRIX");
+    }
+
+
+    /**
+     * 浠� URL 涓彁鍙栫摝鐗囩殑 Z/X/Y 鍊�
+     *
+     * @param url
+     * @return
+     */
+    public String extractTileInfoFromUrl(String url) {
+        Uri uri = Uri.parse(url);
+        Map<String, String> tileInfo = new HashMap<>();
+        String path = uri.getQueryParameter("TILEMATRIX") + File.separator + uri.getQueryParameter("TILEROW") + File.separator + uri.getQueryParameter("TILECOL");
+        return path;
+    }
+
 }

--
Gitblit v1.8.0