【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式
在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。
那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。
1、获取方式
这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。
1.1、获取设备信息
获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:
ohos.system.DeviceInfo.
具体的方法如下:
Modifier and Type |
Method |
Description |
---|---|---|
static String |
getAbiList() |
Obtains the abilist represented by a string. |
static String |
getBootloaderVersion() |
Obtains the bootloader version represented by a string. |
static String |
getBrand() |
Obtains the brand represented by a string. |
static String |
getBuildHost() |
Obtains the build host represented by a string. |
static String |
getBuildRootHash() |
Obtains the build root hash represented by a string. |
static String |
getBuildTime() |
Obtains the build time represented by a string. |
static String |
getBuildType() |
Obtains the build type represented by a string. |
static String |
getBuildUser() |
Obtains the build user represented by a string. |
static String |
getDeviceType() |
Obtains the device type represented by a string. |
static String |
getDisplayVersion() |
Obtains the display version represented by a string. |
static String |
getHardwareModel() |
Obtains the hardware version represented by a string. |
static String |
getHardwareProfile() |
Obtains the hardware profile represented by a string. |
static String |
getIncrementalVersion() |
Obtains the incremental version represented by a string. |
static String |
getLocale() |
Obtains the product locale represented by a string. |
static String |
getLocaleLanguage() |
Obtains the product locale's language represented by a string. |
static String |
getLocaleRegion() |
Obtains the product locale's region represented by a string. |
static String |
getManufacture() |
Obtains the manufacture represented by a string. |
static String |
getModel() |
Obtains the product model represented by a string. |
static String |
getName() |
Obtains the product name represented by a string. |
static String |
getOsReleaseType() |
Obtains the os release type represented by a string. |
static String |
getProductSeries() |
Obtains the product series represented by a string. |
static String |
getSecurityPatchTag() |
Obtains the security patch tag represented by a string. |
static String |
getSoftwareModel() |
Obtains the software model represented by a string. |
static String |
getVersionId() |
Obtains the version id represented by a string. |
1.2、获取系统信息
获取系统信息,鸿蒙的SDK包为我们提供了SystemVersion类,通过该类的一些静态方法,可以获取设备信息,SystemVersion类的包路径为:
ohos.system.version.SystemVersion
具体的方法如下:
Modifier and Type |
Method |
Description |
---|---|---|
static int |
getApiVersion() |
Obtains the API version number. |
static int |
getBuildVersion() |
Obtains the build (B) version number, which increases with each new development build. |
static int |
getFeatureVersion() |
Obtains the feature (F) version number, which increases with any planned new features. |
static int |
getFirstApiVersion() |
Obtains the First API version number. |
static int |
getMajorVersion() |
Obtains the major (M) version number, which increases with any updates to the overall architecture. |
static String |
getOSFullName() |
Obtains the OS full name. |
static String |
getReleaseType() |
Obtains the OS release type. |
static int |
getSdkApiVersion() |
Obtains the SDK API version number. |
static int |
getSeniorVersion() |
Obtains the senior (S) version number, which increases with any updates to the partial architecture or major features. |
static String |
getVersion() |
Obtains the version number represented by a string in the following format: Major version number.Senior version number.Feature version number.Build version number. |
2、API兼容调用方式
上述鸿蒙提供的DeviceInfo、SystemVersion类,其中一些方法,是在SDK7 中才提供的,换句话说,就是在SDK6中是不存在这些方法的,因此,当我们
的应用运行在SDK6的鸿蒙系统中,比如鸿蒙2.0系统上,当我们使用了这些方法(API),会出现运行时错误,导致引用闪退。
比如我们在鸿蒙系统2.0的手机上,应用调用getManufacturer方法,会出现如下错误:
java.lang.NoSuchMethodError: No static method getManufacture()Ljava/lang/String; in class Lohos/system/DeviceInfo; or its super classes (declaration of 'ohos.system.DeviceInfo' appears in /system/framework/zframework.z.jar!classes2.dex)
at com.xxx.xxx.AppUtils.getManufacturer(AppUtils.java:10)
通过日志,可以很明显的看出报出的错误是未找到方法的错误。
那我们应该怎么解决上述问题呢,在不支持的系统中,兼容处理这种错误,下面为大家提供一种解决方案。
我们定义一个Build,提供一些系统SDK版本定义,具体如下
public class Build { public static class VERSION { public static final int CODES_1 = 1; public static final int CODES_2 = 2; public static final int CODES_3 = 3; public static final int CODES_4 = 4; public static final int CODES_5 = 5; public static final int CODES_6 = 6; public static final int CODES_7 = 7; }}
对外回传一个空值,或者传递一个UNKNOWN字符串。在调用getManufacturer 的地方,增加系统SDK版本的判断,当我们的系统SDK版本号满足调用该方法的条件下,才去调用getManufacturer方法,否则,对外回传一个空值,或者传递一个UNKNOWN字符串。
public static String getManufacturer() { if (SystemVersion.getApiVersion()>= Build.VERSION.CODES_7) { return checkValidData(DeviceInfo.getManufacture()); } return "UNKNOWN";}private static String checkValidData(final String data) { String tempData = data; if (tempData == null || tempData.length() == 0) { tempData = ""; } return tempData;}
这里我们调用SystemVersion.getApiVersion()得到一个系统的API版本号,就是上面说的支持的SDK版本号,通过该版本号可以知道当前使用的手机系统最高
支持的SDK版本具体是多少,这样就完成了我们调用鸿蒙开发SDK包中的API的兼容性调用,解决了可能出现的运行时闪退问题。
本文到此就完结了,谢谢大家的阅读!