diff --git a/app/src/main/assets/print_demo.html b/app/src/main/assets/print_demo.html index eef83f7..9a08020 100644 --- a/app/src/main/assets/print_demo.html +++ b/app/src/main/assets/print_demo.html @@ -524,13 +524,80 @@ var infoStr = window.android.getAboutInfo(); try { var info = JSON.parse(infoStr); - var html = '应用名称: ' + info.appName + '
' + - '版本号: ' + info.versionName + '
' + - '设备型号: ' + info.model + '
' + - '系统版本: Android ' + info.osVersion + '
' + - 'CPU 架构: ' + info.cpuAbi + '
' + - '运行模式: ' + (info.is64Bit ? "64位" : "32位兼容模式"); - document.getElementById('aboutBody').innerHTML = html; + + var friendlyNames = { + appName: '应用名称', + versionName: '版本号', + model: '设备型号', + osVersion: '系统版本', + cpuAbi: 'CPU 架构', + is64Bit: '运行模式', + screen: '屏幕与显示', + width: '宽度像素', + height: '高度像素', + density: '屏幕密度', + densityDpi: '屏幕DPI', + physicalSize: '物理尺寸 (英寸)', + hardware: '硬件与厂商', + manufacturer: '制造商', + brand: '品牌', + fingerprint: '系统指纹', + system: '系统环境', + sdkVersion: 'SDK 版本', + language: '系统语言', + country: '国家代码', + securityPatch: '安全补丁', + memory: '内存信息', + totalRam: '总内存 (RAM)', + availRam: '可用内存', + storage: '存储信息', + totalInternal: '总内部存储', + availInternal: '可用内部存储', + network: '网络状态', + type: '网络类型', + ipAddress: 'IP 地址', + battery: '电池状态', + level: '电量百分比', + status: '充电状态', + plugged: '供电类型' + }; + + function formatBytes(bytes) { + if (!bytes || bytes <= 0) return '0 B'; + var k = 1024; + var sizes = ['B', 'KB', 'MB', 'GB', 'TB']; + var i = Math.floor(Math.log(bytes) / Math.log(k)); + return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i]; + } + + function buildHtml(data, prefix) { + var keys = Object.keys(data); + var res = ''; + for (var i = 0; i < keys.length; i++) { + var key = keys[i]; + var val = data[key]; + var label = friendlyNames[key] || key; + var indent = prefix ? 'margin-left: 15px;' : ''; + + if (val !== null && typeof val === 'object') { + res += '
' + label + '
'; + res += buildHtml(val, true); + } else { + var displayVal = val; + if (key === 'is64Bit') { + displayVal = val ? '64位' : '32位兼容模式'; + } else if (key === 'totalRam' || key === 'availRam' || key === 'totalInternal' || key === 'availInternal') { + displayVal = formatBytes(val); + } else if (key === 'level') { + displayVal = val >= 0 ? val + '%' : '未知'; + } + res += '
' + label + ': ' + displayVal + '
'; + } + } + return res; + } + + document.getElementById('aboutBody').innerHTML = buildHtml(info, false); document.getElementById('aboutModal').style.display = 'flex'; } catch (e) { document.getElementById('aboutBody').innerText = "获取信息解析失败: " + infoStr; diff --git a/app/src/main/java/com/stand/standapp/AndroidInterface.kt b/app/src/main/java/com/stand/standapp/AndroidInterface.kt index d87c7d5..c1309d7 100644 --- a/app/src/main/java/com/stand/standapp/AndroidInterface.kt +++ b/app/src/main/java/com/stand/standapp/AndroidInterface.kt @@ -378,22 +378,9 @@ class AndroidInterface(private val activity: MainActivity) { fun getAboutInfo(): String { return try { val packageInfo = activity.packageManager.getPackageInfo(activity.packageName, 0) - val json = JSONObject() + val json = com.stand.standapp.utils.DeviceInfoUtils.getDeviceInfoJson(activity) json.put("appName", activity.getString(R.string.app_name)) - json.put("versionName", packageInfo.versionName) - json.put("model", android.os.Build.MODEL) - json.put("osVersion", android.os.Build.VERSION.RELEASE) - - val abis = android.os.Build.SUPPORTED_ABIS - json.put("cpuAbi", abis.joinToString(",")) - - val is64Bit = if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.M) { - android.os.Process.is64Bit() - } else { - abis.any { it.contains("64") } - } - json.put("is64Bit", is64Bit) - + json.put("versionName", packageInfo.versionName ?: "1.0.0") json.toString() } catch (e: Exception) { Timber.tag("AndroidInterface").e(e, "getAboutInfo failed")