From 4f7f99c6ea914bcd38de78bd8371be566026b905 Mon Sep 17 00:00:00 2001
From: zuoxiao <470321431@qq.com>
Date: 星期三, 26 二月 2025 15:54:14 +0800
Subject: [PATCH] -为按钮和列表项添加波纹效果,以获得更好的视觉反馈 -改进MapFragment中的底部布局动画 -在MapFragment中添加设备状态和RTU地址显示 -更新BaseListResult以支持泛型类型 -为设备数据添加IntakeListResult和IntakeResult -通过数据库支持增强标记位置更新功能 -添加电话拨号意图以分隔标记详细信息 -通过过期检查改进磁贴缓存 -添加问题报告的确认对话框 -更新登录活动以限制用户名长度 -为波纹效果和UI元素添加新颜色 -重构XML布局以使用新的波纹图 -改进MapFragment中的错误处理和用户反馈
---
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