version:1.0.4

fix:
update:增加下载
This commit is contained in:
2025-12-15 09:36:54 +08:00
parent 3124840575
commit 3f83d1b136
60 changed files with 2729 additions and 351 deletions

View File

@@ -0,0 +1,100 @@
package com.xwad.os.manager;
import android.text.TextUtils;
import com.tencent.mmkv.MMKV;
import com.xwad.os.config.CommonConfig;
import java.util.Random;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
public class DeviceSNManager {
private static final String SN_KEY = "device_sn";
private static final String PREFIX = "CDSN";
private static final int RANDOM_DIGITS = 9;
private static MMKV mMMKV = MMKV.mmkvWithID(CommonConfig.MMKV_ID, MMKV.MULTI_PROCESS_MODE);
public DeviceSNManager() {
}
/**
* 获取设备SN如果不存在则创建新的
*/
public static String getDeviceSN() {
String existingSN = mMMKV.decodeString(SN_KEY, "");
if (!TextUtils.isEmpty(existingSN)) {
return existingSN;
}
String newSN = generateNewSN();
mMMKV.encode(SN_KEY, newSN);
return newSN;
}
/**
* 生成新的设备SN
* 格式CDSN202511T923852225
*/
private static String generateNewSN() {
StringBuilder snBuilder = new StringBuilder();
// 添加前缀
snBuilder.append(PREFIX);
// 添加年份月份
String timeYear = formatTimestamp(System.currentTimeMillis());
snBuilder.append(timeYear);
// 添加基于时间戳的9位随机数字
snBuilder.append(generateRandomString(10));
return snBuilder.toString();
}
// 定义可供随机选择的字符池
private static final String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private static final String LETTERS_AND_DIGITS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
public static String generateRandomString(int length) {
if (length < 1) {
throw new IllegalArgumentException("Length must be at least 1");
}
Random random = new Random();
StringBuilder sb = new StringBuilder(length);
// 第一位:确保是字母
sb.append(LETTERS.charAt(random.nextInt(LETTERS.length())));
// 剩余位数:字母或数字
for (int i = 1; i < length; i++) {
sb.append(LETTERS_AND_DIGITS.charAt(random.nextInt(LETTERS_AND_DIGITS.length())));
}
return sb.toString();
}
/**
* 删除已存储的SN用于测试或重新生成
*/
public static void clearDeviceSN() {
mMMKV.removeValueForKey(SN_KEY);
}
/**
* 检查是否已存在SN
*/
public static boolean hasDeviceSN() {
return mMMKV.containsKey(SN_KEY) && !TextUtils.isEmpty(mMMKV.decodeString(SN_KEY, ""));
}
public static String formatTimestamp(long timestamp) {
// 创建指定格式的格式化对象,"yyyyMM" 表示6位数字的年份和月份"'T'" 表示字面量字符 T
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM'T'");
Date date = new Date(timestamp);
// 将 Date 对象格式化为字符串
return sdf.format(date);
}
}