如何通过JDK API获取设备厂商或品牌?基于JDK8的跨平台SDK开发
获取设备厂商/品牌的实现方案
JDK 8标准API并没有提供直接获取设备厂商或品牌的能力,因为JDK核心API聚焦跨平台通用功能,这类硬件/系统厂商信息属于平台相关细节,不在标准覆盖范围内。你需要针对Android和Windows平台分别实现:
Android平台
Android系统提供了专属API获取设备信息,你的SDK集成到Android应用后,可以通过android.os.Build类的静态字段获取:
- 厂商名称:
Build.MANUFACTURER(比如Samsung、Huawei) - 品牌名称:
Build.BRAND(部分设备和厂商一致,比如Google Pixel的BRAND为google,MANUFACTURER为Google)
注意:开发时需依赖Android的android.jar,但打包SDK Jar时不要包含Android SDK类,避免冲突,运行时由宿主Android应用提供这些类。
Windows平台
Windows下可以通过两种方式实现:
执行系统命令
通过wmic命令读取设备厂商,用Java的ProcessBuilder执行并解析输出:
public static String getWindowsDeviceVendor() { try { Process process = new ProcessBuilder("wmic", "csproduct", "get", "vendor").start(); BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream())); // 跳过标题行 reader.readLine(); String line = reader.readLine(); return line == null ? "Unknown" : line.trim(); } catch (IOException e) { e.printStackTrace(); return "Unknown"; } }
JNI调用Windows API
调用SetupDiGetClassDevs等Windows原生API读取设备信息,实现复杂度较高,适合对性能要求严格的场景。
跨平台适配
在SDK中通过判断操作系统,调用对应平台的实现,同时用反射处理Android API避免非Android环境崩溃:
public static String getDeviceManufacturer() { String osName = System.getProperty("os.name").toLowerCase(); if (osName.contains("android")) { try { Class<?> buildClass = Class.forName("android.os.Build"); return (String) buildClass.getField("MANUFACTURER").get(null); } catch (Exception e) { e.printStackTrace(); return "Unknown"; } } else if (osName.contains("windows")) { return getWindowsDeviceVendor(); } else { // 其他平台可扩展实现 return "Unknown"; } }
内容的提问来源于stack exchange,提问作者sunjinbo
相关产品推荐
相关产品推荐

