HarmonyOS鸿蒙Next中卓易通环境下uniapp怎么判断是纯血鸿蒙还是4.x以下的

HarmonyOS鸿蒙Next中卓易通环境下uniapp怎么判断是纯血鸿蒙还是4.x以下的

uni.getSystemInfo方法,在桌易通的环境,返回的os判断为安卓,只有romName字段返回了HarmonyOS,但是romVersion却是4.0.0的。#ifdef HARMONY的条件编译在桌易通会失效

4 回复

这个应该不需要uni来判断吧,

项目打包后, 5.0和5.0以下的,肯定是两个不同的安装包, 做个开关区分就行了。

更多关于HarmonyOS鸿蒙Next中卓易通环境下uniapp怎么判断是纯血鸿蒙还是4.x以下的的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


不是呢,老项目来的,现在只能打包安卓的apk,使用桌易通安装,

在HarmonyOS Next的卓易通环境中,可通过@ohos.app.ability.AbilityConstantapiVersion判断。若版本号大于等于9,则为纯血鸿蒙Next;低于9则为4.x或以下版本。具体使用AbilityConstant.ConfigInfo中的apiVersion属性进行版本比对。

在HarmonyOS Next(纯血鸿蒙)的卓易通环境下,uni.getSystemInfo 返回的 osName 字段确实可能仍为 "android",这是为了兼容现有逻辑。要准确判断是否为纯血鸿蒙,建议通过以下方式:

  1. 使用 romName 字段
    检查 uni.getSystemInfo 返回的 romName 字段。若其值为 "HarmonyOS",且 romVersion"4.0.0" 或更高版本(如 5.0.0"),可初步判定为HarmonyOS Next环境。

  2. 结合 platform 字段
    同时检查 platform 字段是否为 "harmony"。在纯血鸿蒙中,该字段应返回 "harmony",而旧版鸿蒙(如4.x以下)可能返回 "android"

  3. 条件编译的替代方案
    由于 #ifdef HARMONY 在卓易通可能失效,建议改用运行时判断替代条件编译。例如:

    const systemInfo = uni.getSystemInfoSync();
    const isPureHarmony = systemInfo.romName === 'HarmonyOS' 
                          && parseFloat(systemInfo.romVersion) >= 4.0 
                          && systemInfo.platform === 'harmony';
    
  4. 注意兼容性
    romVersion"4.0.0",需进一步确认是否为Next版本(如通过API特性检测)。纯血鸿蒙的ROM版本通常以主版本号5+标识,但部分测试环境可能仍显示4.0.0。

总结:依赖 romNameromVersionplatform 字段的组合判断,可更可靠地区分纯血鸿蒙与旧版鸿蒙。避免依赖条件编译,改用运行时动态检测。

回到顶部