You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.22 22:55:14