import { vibrator, VibratorStopMode } from '@kit.SensorServiceKit'; import { LogUtil } from './LogUtil'; import { resourceManager, DeviceType, Direction, ScreenDensity } from '@kit.LocalizationKit'; import { StrUtil } from './StrUtil'; import { AssetUtil } from './AssetUtil'; import { PreferencesUtil } from './PreferencesUtil'; import { RandomUtil } from './RandomUtil'; import deviceInfo from '@ohos.deviceInfo'; import { ResUtil } from './ResUtil'; import { identifier } from '@kit.AdsKit'; export const DEVICE_ID_KEY: string = "device_id_cache_harmony_key"; //设备ID的Key /*** 定义移除操作的存储方法接口*/ interface StorageMethodForRemove {removeSync: (key: string) => void; }/*** 定义获取和添加操作的存储方法接口*/ interface StorageMethodForGetAdd {getSync: (key: string) => string | null;addSync: (key: string, value: string) => void; }/*** 设备相关工具类。* 提供设备信息、配置、能力、振动等功能的访问。** @author 鸿蒙布道师* @since 2025/04/09*/ export class DeviceUtil {private static deviceId: string = ''; // 设备ID/*** 获取设备ID(卸载APP后依旧不变)。* 如果未生成过设备ID,则会自动生成并存储。** @param rule 是否包含 `-`,默认为 true。* @param generateId 自定义生成的ID(可选)。* @returns 返回设备ID。*/static getDeviceId(rule: boolean = true, generateId?: string): string {if (StrUtil.isEmpty(DeviceUtil.deviceId)) {// 使用定义的接口类型const storageMethod: StorageMethodForGetAdd = AssetUtil.canIUse()? AssetUtil: PreferencesUtil;const storedId: string | null = storageMethod.getSync(DEVICE_ID_KEY);let deviceId: string = StrUtil.toStr(storedId);if (StrUtil.isEmpty(deviceId)) {deviceId = generateId && StrUtil.isNotEmpty(generateId)? generateId: RandomUtil.generateRandomUUID(true);if (!rule) {deviceId = deviceId.replace(/-/g, '');}storageMethod.addSync(DEVICE_ID_KEY, deviceId);!AssetUtil.canIUse() && LogUtil.error('当前设备不支持关键资产存储服务');}DeviceUtil.deviceId = deviceId;}return DeviceUtil.deviceId;}/*** 移除设备ID。*/static deleteDeviceId(): void {DeviceUtil.deviceId = '';// 使用定义的接口类型const storageMethod: StorageMethodForRemove = AssetUtil.canIUse()? AssetUtil: PreferencesUtil;storageMethod.removeSync(DEVICE_ID_KEY);}/*** 获取设备品牌名称。示例:HUAWEI。*/static getBrand(): string {return deviceInfo.brand;}/*** 获取认证型号。示例:ALN-AL00。*/static getProductModel(): string {return deviceInfo.productModel;}/*** 获取品牌和型号组合。示例:HUAWEI ALN-AL00。*/static getBrandModel(): string {return `${deviceInfo.brand} ${deviceInfo.productModel}`;}/*** 获取市场名称。示例:HUAWEI Mate 60 Pro。*/static getMarketName(): string {return deviceInfo.marketName;}/*** 获取硬件版本号。示例:HL1CMSM。*/static getHardwareModel(): string {return deviceInfo.hardwareModel;}/*** 获取设备厂家名称。示例:HUAWEI。*/static getManufacture(): string {return deviceInfo.manufacture;}/*** 获取系统版本。示例:HarmonyOS 5.0.0。*/static getOsFullName(): string {return deviceInfo.osFullName;}/*** 获取产品版本。示例:ALN-AL00 5.0.0.1(XXX)。*/static getDisplayVersion(): string {return deviceInfo.displayVersion;}/*** 获取系统软件API版本。示例:12。*/static getSdkApiVersion(): number {return deviceInfo.sdkApiVersion;}/*** 获取编译构建的版本号。*/static getBuildVersion(): number {return deviceInfo.buildVersion;}/*** 获取OS版本号。示例:5.0.0。*/static getOsVersion(): string {return `${deviceInfo.majorVersion}.${deviceInfo.seniorVersion}.${deviceInfo.featureVersion}`;}/*** 获取开发者匿名设备标识符。*/static getODID(): string {return deviceInfo.ODID;}/*** 获取设备序列号。需要权限:ohos.permission.sec.ACCESS_UDID。*/static getSerial(): string {return deviceInfo.serial;}/*** 获取设备UDID。需要权限:ohos.permission.sec.ACCESS_UDID。*/static getUdid(): string {return deviceInfo.udid;}/*** 获取开放匿名设备标识符。需要权限:ohos.permission.APP_TRACKING_CONSENT。*/static async getOAID(): Promise<string> {return identifier.getOAID();}/*** 获取应用二进制接口(Abi)。示例:arm64-v8a。*/static getAbiList(): string {return deviceInfo.abiList;}/*** 获取系统的发布类型。取值为:Canary、Beta、Release。*/static getOsReleaseType(): string {return deviceInfo.osReleaseType;}/*** 获取当前设备类型编号。*/static getDeviceType(): number {return DeviceUtil.getDeviceCapabilitySync().deviceType;}/*** 获取当前设备类型的字符串描述。*/static getDeviceTypeStr(): string {switch (DeviceUtil.getDeviceType()) {case DeviceType.DEVICE_TYPE_PHONE:return '手机';case DeviceType.DEVICE_TYPE_TABLET:return '平板';case DeviceType.DEVICE_TYPE_PC:return '电脑';case DeviceType.DEVICE_TYPE_TV:return '电视';case DeviceType.DEVICE_TYPE_CAR:return '汽车';case DeviceType.DEVICE_TYPE_WEARABLE:return '穿戴';case DeviceType.DEVICE_TYPE_2IN1:return '2IN1';default:return '';}}/*** 获取设备的Configuration(异步)。*/static async getConfiguration(): Promise<resourceManager.Configuration> {return ResUtil.getConfiguration(true);}/*** 获取设备的Configuration(同步)。*/static getConfigurationSync(): resourceManager.Configuration {return ResUtil.getConfigurationSync();}/*** 获取当前设备屏幕方向。*/static getDirection(): Direction {return DeviceUtil.getConfigurationSync().direction;}/*** 获取设备的DeviceCapability(异步)。*/static async getDeviceCapability(): Promise<resourceManager.DeviceCapability> {return ResUtil.getDeviceCapability(true);}/*** 获取设备的DeviceCapability(同步)。*/static getDeviceCapabilitySync(): resourceManager.DeviceCapability {return ResUtil.getDeviceCapabilitySync();}/*** 获取当前设备屏幕密度。*/static getScreenDensity(): ScreenDensity {return DeviceUtil.getDeviceCapabilitySync().screenDensity;}/*** 开启振动。* 需要权限:ohos.permission.VIBRATE。** @param duration 振动时长(毫秒),默认为 1000ms。* @param usage 振动用途,默认为 'media'。*/static startVibration(duration: number = 1000, usage: vibrator.Usage = 'media'): Promise<void> {return vibrator.startVibration({ type: 'time', duration }, { id: 0, usage });}/*** 停止振动。* 需要权限:ohos.permission.VIBRATE。*/static stopVibration(): Promise<void> {return vibrator.stopVibration(VibratorStopMode.VIBRATOR_STOP_MODE_TIME);} }
代码如下:
import { vibrator, VibratorStopMode } from '@kit.SensorServiceKit';
import { LogUtil } from './LogUtil';
import { resourceManager, DeviceType, Direction, ScreenDensity } from '@kit.LocalizationKit';
import { StrUtil } from './StrUtil';
import { AssetUtil } from './AssetUtil';
import { PreferencesUtil } from './PreferencesUtil';
import { RandomUtil } from './RandomUtil';
import deviceInfo from '@ohos.deviceInfo';
import { ResUtil } from './ResUtil';
import { identifier } from '@kit.AdsKit';
export const DEVICE_ID_KEY: string = "device_id_cache_harmony_key"; //设备ID的Key
/*** 定义移除操作的存储方法接口*/
interface StorageMethodForRemove {removeSync: (key: string) => void;
}/*** 定义获取和添加操作的存储方法接口*/
interface StorageMethodForGetAdd {getSync: (key: string) => string | null;addSync: (key: string, value: string) => void;
}/*** 设备相关工具类。* 提供设备信息、配置、能力、振动等功能的访问。** @author 鸿蒙布道师* @since 2025/04/09*/
export class DeviceUtil {private static deviceId: string = ''; // 设备ID/*** 获取设备ID(卸载APP后依旧不变)。* 如果未生成过设备ID,则会自动生成并存储。** @param rule 是否包含 `-`,默认为 true。* @param generateId 自定义生成的ID(可选)。* @returns 返回设备ID。*/static getDeviceId(rule: boolean = true, generateId?: string): string {if (StrUtil.isEmpty(DeviceUtil.deviceId)) {// 使用定义的接口类型const storageMethod: StorageMethodForGetAdd = AssetUtil.canIUse()? AssetUtil: PreferencesUtil;const storedId: string | null = storageMethod.getSync(DEVICE_ID_KEY);let deviceId: string = StrUtil.toStr(storedId);if (StrUtil.isEmpty(deviceId)) {deviceId = generateId && StrUtil.isNotEmpty(generateId)? generateId: RandomUtil.generateRandomUUID(true);if (!rule) {deviceId = deviceId.replace(/-/g, '');}storageMethod.addSync(DEVICE_ID_KEY, deviceId);!AssetUtil.canIUse() && LogUtil.error('当前设备不支持关键资产存储服务');}DeviceUtil.deviceId = deviceId;}return DeviceUtil.deviceId;}/*** 移除设备ID。*/static deleteDeviceId(): void {DeviceUtil.deviceId = '';// 使用定义的接口类型const storageMethod: StorageMethodForRemove = AssetUtil.canIUse()? AssetUtil: PreferencesUtil;storageMethod.removeSync(DEVICE_ID_KEY);}/*** 获取设备品牌名称。示例:HUAWEI。*/static getBrand(): string {return deviceInfo.brand;}/*** 获取认证型号。示例:ALN-AL00。*/static getProductModel(): string {return deviceInfo.productModel;}/*** 获取品牌和型号组合。示例:HUAWEI ALN-AL00。*/static getBrandModel(): string {return `${deviceInfo.brand} ${deviceInfo.productModel}`;}/*** 获取市场名称。示例:HUAWEI Mate 60 Pro。*/static getMarketName(): string {return deviceInfo.marketName;}/*** 获取硬件版本号。示例:HL1CMSM。*/static getHardwareModel(): string {return deviceInfo.hardwareModel;}/*** 获取设备厂家名称。示例:HUAWEI。*/static getManufacture(): string {return deviceInfo.manufacture;}/*** 获取系统版本。示例:HarmonyOS 5.0.0。*/static getOsFullName(): string {return deviceInfo.osFullName;}/*** 获取产品版本。示例:ALN-AL00 5.0.0.1(XXX)。*/static getDisplayVersion(): string {return deviceInfo.displayVersion;}/*** 获取系统软件API版本。示例:12。*/static getSdkApiVersion(): number {return deviceInfo.sdkApiVersion;}/*** 获取编译构建的版本号。*/static getBuildVersion(): number {return deviceInfo.buildVersion;}/*** 获取OS版本号。示例:5.0.0。*/static getOsVersion(): string {return `${deviceInfo.majorVersion}.${deviceInfo.seniorVersion}.${deviceInfo.featureVersion}`;}/*** 获取开发者匿名设备标识符。*/static getODID(): string {return deviceInfo.ODID;}/*** 获取设备序列号。需要权限:ohos.permission.sec.ACCESS_UDID。*/static getSerial(): string {return deviceInfo.serial;}/*** 获取设备UDID。需要权限:ohos.permission.sec.ACCESS_UDID。*/static getUdid(): string {return deviceInfo.udid;}/*** 获取开放匿名设备标识符。需要权限:ohos.permission.APP_TRACKING_CONSENT。*/static async getOAID(): Promise<string> {return identifier.getOAID();}/*** 获取应用二进制接口(Abi)。示例:arm64-v8a。*/static getAbiList(): string {return deviceInfo.abiList;}/*** 获取系统的发布类型。取值为:Canary、Beta、Release。*/static getOsReleaseType(): string {return deviceInfo.osReleaseType;}/*** 获取当前设备类型编号。*/static getDeviceType(): number {return DeviceUtil.getDeviceCapabilitySync().deviceType;}/*** 获取当前设备类型的字符串描述。*/static getDeviceTypeStr(): string {switch (DeviceUtil.getDeviceType()) {case DeviceType.DEVICE_TYPE_PHONE:return '手机';case DeviceType.DEVICE_TYPE_TABLET:return '平板';case DeviceType.DEVICE_TYPE_PC:return '电脑';case DeviceType.DEVICE_TYPE_TV:return '电视';case DeviceType.DEVICE_TYPE_CAR:return '汽车';case DeviceType.DEVICE_TYPE_WEARABLE:return '穿戴';case DeviceType.DEVICE_TYPE_2IN1:return '2IN1';default:return '';}}/*** 获取设备的Configuration(异步)。*/static async getConfiguration(): Promise<resourceManager.Configuration> {return ResUtil.getConfiguration(true);}/*** 获取设备的Configuration(同步)。*/static getConfigurationSync(): resourceManager.Configuration {return ResUtil.getConfigurationSync();}/*** 获取当前设备屏幕方向。*/static getDirection(): Direction {return DeviceUtil.getConfigurationSync().direction;}/*** 获取设备的DeviceCapability(异步)。*/static async getDeviceCapability(): Promise<resourceManager.DeviceCapability> {return ResUtil.getDeviceCapability(true);}/*** 获取设备的DeviceCapability(同步)。*/static getDeviceCapabilitySync(): resourceManager.DeviceCapability {return ResUtil.getDeviceCapabilitySync();}/*** 获取当前设备屏幕密度。*/static getScreenDensity(): ScreenDensity {return DeviceUtil.getDeviceCapabilitySync().screenDensity;}/*** 开启振动。* 需要权限:ohos.permission.VIBRATE。** @param duration 振动时长(毫秒),默认为 1000ms。* @param usage 振动用途,默认为 'media'。*/static startVibration(duration: number = 1000, usage: vibrator.Usage = 'media'): Promise<void> {return vibrator.startVibration({ type: 'time', duration }, { id: 0, usage });}/*** 停止振动。* 需要权限:ohos.permission.VIBRATE。*/static stopVibration(): Promise<void> {return vibrator.stopVibration(VibratorStopMode.VIBRATOR_STOP_MODE_TIME);}
}