2021-10-31 10:20:06
有一个名为 AndroidDeviceNames 的开源项目可以很方便地获取到当前设备名称,一行代码即可:
String deviceName = DeviceName.getDeviceName();
推荐使用其 1.1.9 版本,其 2.0 版本改为使用数据库存储 model 和设备名对应关系,恐怕初始化会有性能问题(SQLite 一般初始化需要 200ms 左右)。
而且我最近在适配小米平板时,发现小米设备名称获取方式有些不同,看看以下不同设备对于 adb shell getprop | grep "ro.product.model\|ro.product.marketname" 的输出结果:
* 原生模拟器:
[ro.product.model]: [Android SDK built for x86]
(没有 ro.product.marketname)
* 小米 10 Pro, MIUI 12.5:
[ro.product.model]: [Mi 10 Pro]
(没有 ro.product.marketname)
* 小米平板 5,MIUI 12.5:
[ro.product.marketname]: [Xiaomi Pad 5]
[ro.product.model]: [21051182C]
另外,据说一些 Redmi 手机(也属于小米公司产品)的输出结果也和小米平板 5 差不多。
所以如果我没猜错的话,小米脱离原生自行搞了个 ro.product.marketname,因此对于小米设备,最好的获取设备名称的方法应该是:先尝试读取 ro.product.marketname,如果为空,再读取 DeviceName.getDeviceName(),因为后者是基于 ro.product.model 的。封装示例:
public static String deviceMarketName() {
String marketName = getSystemProperty("ro.product.marketname");
if (TextUtils.isEmpty(marketName)) {
return deviceName();
} else {
return marketName;
}
}
451 viewsedited 07:20