贝博恩创新科技网

Android如何准确获取手机品牌型号?

使用 android.os.Build

Android 系统在 android.os.Build 类中预置了大量设备信息,获取品牌信息主要用到以下几个字段:

Android如何准确获取手机品牌型号?-图1
(图片来源网络,侵删)
字段名 类型 说明
BRAND String 设备品牌,通常是小写字母,如 "samsung", "xiaomi", "huawei"。
MANUFACTURER String 制造商,通常是品牌的全称,如 "Samsung", "Xiaomi", "HUAWEI"。
MODEL String 设备型号,如 "SM-G991B", "Redmi K50"。
PRODUCT String 产品名称,通常与品牌和型号相关,如 "a52q", "lmi"。
DEVICE String 设备代号,通常用于开发,如 "a52q", "lmi"。
HARDWARE String 硬件名称,如 "qcom", "mtk"。
BOARD String 主板名称
FINGERPRINT String 设备的唯一指纹,由多个部分拼接而成,非常详细。

推荐使用 MANUFACTURER,因为它返回的是可读性更好的品牌全称(首字母大写),而 BRAND 通常是用于系统内部的小写标识。


在 Activity 或 Fragment 中直接获取(最简单)

这是最直接的方法,适用于在 Activity、Service 或任何可以直接获取 Context 的地方。

import android.os.Build;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView brandTextView = findViewById(R.id.brandTextView);
        // 获取制造商(推荐使用)
        String manufacturer = Build.MANUFACTURER;
        // 获取品牌标识
        String brand = Build.BRAND;
        // 获取设备型号
        String model = Build.MODEL;
        // 将信息显示在界面上
        String info = "制造商: " + manufacturer + "\n" +
                      "品牌: " + brand + "\n" +
                      "型号: " + model;
        brandTextView.setText(info);
    }
}

对应的 XML 布局文件 (activity_main.xml):

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="16dp">
    <TextView
        android:id="@+id/brandTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="18sp"
        android:layout_gravity="center_horizontal"/>
</LinearLayout>

创建一个工具类(更规范、更推荐)

为了代码的复用性和整洁性,最好将获取设备信息的功能封装到一个工具类中。

Android如何准确获取手机品牌型号?-图2
(图片来源网络,侵删)

创建 DeviceUtils.java 工具类

import android.os.Build;
public class DeviceUtils {
    // 私有构造方法,防止被实例化
    private DeviceUtils() {
        throw new UnsupportedOperationException("Cannot be instantiated");
    }
    /**
     * 获取设备制造商
     * @return 制造商名称,如 "Samsung", "Xiaomi"
     */
    public static String getManufacturer() {
        return Build.MANUFACTURER;
    }
    /**
     * 获取设备品牌
     * @return 品牌标识,如 "samsung", "xiaomi"
     */
    public static String getBrand() {
        return Build.BRAND;
    }
    /**
     * 获取设备型号
     * @return 设备型号,如 "SM-G991B", "Redmi K50"
     */
    public static String getModel() {
        return Build.MODEL;
    }
    /**
     * 获取产品名称
     * @return 产品名称,如 "a52q", "lmi"
     */
    public static String getProduct() {
        return Build.PRODUCT;
    }
    /**
     * 获取设备指纹
     * @return 设备指纹信息
     */
    public static String getFingerprint() {
        return Build.FINGERPRINT;
    }
}

在 Activity 中使用工具类

import android.os.Bundle;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView brandTextView = findViewById(R.id.brandTextView);
        // 使用工具类获取信息
        String manufacturer = DeviceUtils.getManufacturer();
        String brand = DeviceUtils.getBrand();
        String model = DeviceUtils.getModel();
        String fingerprint = DeviceUtils.getFingerprint();
        String info = "制造商: " + manufacturer + "\n" +
                      "品牌: " + brand + "\n" +
                      "型号: " + model + "\n\n" +
                      "设备指纹: " + fingerprint;
        brandTextView.setText(info);
    }
}

使用 BuildConfig 获取应用包名(补充)

虽然 BuildConfig 不是用来获取手机品牌的,但它是获取应用自身信息(如包名、版本号)的重要工具,常常与 Build 类一起使用。

// 在 Activity 或任何地方
String packageName = BuildConfig.APPLICATION_ID;
String versionName = BuildConfig.VERSION_NAME;
int versionCode = BuildConfig.VERSION_CODE;

重要注意事项

  1. 无需任何权限 Build 类提供的信息是系统公开的元数据,你的应用不需要在 AndroidManifest.xml 中声明任何权限就可以直接读取。

    Android如何准确获取手机品牌型号?-图3
    (图片来源网络,侵删)
  2. 信息可能被修改(Rom 定制)

    • 大部分主流品牌(三星、小米、华为、OPPO、vivo 等)的设备信息是真实且准确的。
    • 对于一些第三方定制 Rom(如 LineageOS)或被 Root 后的设备,这些信息可能被用户或开发者修改,这些信息不能用作 100% 可靠的安全验证或设备唯一标识。
    • 如果需要获取设备唯一标识符,请考虑使用 ANDROID_ID 或更可靠的 AdvertisingIdClient(需要权限 com.google.android.gms.permission.AD_ID)。
  3. 信息格式不统一

    • MANUFACTURERBRAND 的格式不同,一个是大写全称,一个是小写标识,请根据你的需求选择。
    • MODEL 的格式也可能因品牌而异。
需求 推荐方法 代码示例
快速获取品牌/制造商 直接使用 Build.MANUFACTURER String brand = Build.MANUFACTURER;
在项目中规范使用 创建 DeviceUtils 工具类 String brand = DeviceUtils.getManufacturer();
获取设备唯一指纹 使用 Build.FINGERPRINT String fingerprint = Build.FINGERPRINT;

对于绝大多数场景,直接使用 Build.MANUFACTURER 或通过工具类调用 DeviceUtils.getManufacturer() 就足够了。

分享:
扫描分享到社交APP
上一篇
下一篇