HarmonyOS鸿蒙Next中代码如何获取到模拟器设备型号

HarmonyOS鸿蒙Next中代码如何获取到模拟器设备型号 【问题描述】:deviceInfo.productModel 在模拟器上只返回固定信息,只能判断是否为真机或模拟器。

【问题现象】:在用模拟器测试,需要鸿蒙应用能够自动识别是哪一种设备的模拟器,从而适配对应的UI。没有真机设备。哪个模块能够检测出当前运行的是哪个设备的模拟器?需要针对普通二合一、阔折叠、三折叠、折叠二合一,单屏等做不同的UI适配。

4 回复

开发者您好,如需根据屏幕尺寸做不同的UI适配可以参考如何判断当前设备是手机还是折叠屏手机中的第一条页面布局类问题:页面布局应基于窗口形态(如折叠态/展开态)、宽度和高宽比等动态属性,而非静态设备类型。例如折叠屏设备的折叠态窗口应使用与普通手机相同的布局规则,展开态单独设计一套布局。详情可参考断点的使用。(其中包含常用设备断点区间内容,可根据不同设备以及设备的不同形态对应不同断点区间进行适配。)

如上方案如果依然无法解决问题,开发者仍然需要获取模拟器模拟的设备类型,请问您是在什么样的业务场景中使用该能力,交互流程是怎样的,在哪一个环节遇到了问题?方便说明能力不满足可能带来的影响:什么时间用到?是否高频?有无三方库可以做到?若提供该能力,是否会造成大工作量返工?请您注意提供的内容不要包含您或第三方的非公开信息,如给您带来不便,敬请谅解。

更多关于HarmonyOS鸿蒙Next中代码如何获取到模拟器设备型号的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


cke_129.png

这些不都可以判断是什么设备类型吗?

在HarmonyOS Next中,使用@ohos.deviceInfo模块的deviceInfo接口获取设备型号。通过deviceInfo.model属性可直接读取模拟器或真机的型号信息。此接口属于系统基础能力,需在模块配置文件module.json5中声明ohos.permission.GET_SENSITIVE_PERMISSIONS权限。

在HarmonyOS Next中,可以通过deviceInfo模块的deviceTypedisplay模块的屏幕信息来间接判断模拟器设备类型,用于UI适配。以下是关键方法:

  1. 获取设备类型:使用[@ohos](/user/ohos).deviceInfodeviceType属性,可区分手机、平板、二合一等基础类型。

    import deviceInfo from '[@ohos](/user/ohos).deviceInfo';
    let type = deviceInfo.deviceType; // 如"phone", "tablet", "2in1"
    
  2. 识别折叠屏状态:通过[@ohos](/user/ohos).display模块获取屏幕信息,结合display.getDefaultDisplay()foldStatus属性判断折叠状态(如展开、折叠)。

    import display from '[@ohos](/user/ohos).display';
    let defaultDisplay = display.getDefaultDisplay();
    let foldStatus = defaultDisplay.foldStatus; // 0:未折叠, 1:折叠
    
  3. 适配多屏幕类型:利用display.getAllDisplays()获取多屏信息,通过屏幕数量(如单屏、多屏)和分辨率区分“阔折叠”、“三折叠”等场景。例如:

    • 单屏设备:getAllDisplays()返回一个屏幕。
    • 折叠二合一:结合deviceType为"2in1"及折叠状态判断。
    • 多折叠屏:通过多个屏幕的分辨率和位置关系推断。
  4. UI适配建议:在代码中根据上述信息动态调整布局。例如:

    if (deviceInfo.deviceType === '2in1' && defaultDisplay.foldStatus === 1) {
      // 折叠二合一设备的UI逻辑
    } else if (display.getAllDisplays().length > 1) {
      // 多屏设备的UI逻辑
    }
    

注意:模拟器可能返回固定信息,但通过组合设备类型、屏幕数量和折叠状态,可有效区分大多数设备场景。建议在模拟器中测试不同屏幕配置以验证适配逻辑。

回到顶部