最近提出统计有多少鸿蒙系统用户的需求,就研究了一下判断鸿蒙系统的方法,刚开始研究鸿蒙系统的Api文档时,发现ohos.aafwk.ability.Ability应该是鸿蒙系统中比较基础的类,是鸿蒙应用所具备能力的抽象,也是应用程序的重要组成部分,一开始是打算通过判断是否存在这个类来区分是Harmony系统或者是Android系统, 测试发现鸿蒙系统确实是存在这个类,但是尴尬的是非鸿蒙系统的荣耀或者华为手机也存在这个类,初步猜想应该是华为之前的定制化的EMUI系统都是存在这个类,也许是一开始就为升级Harmony系统埋下了伏笔
一、方案1:判断是否存在纯净模式
因为判断是否存在ohos.aafwk.ability.Ability这个类,来决定是否是鸿蒙系统这条路走不通之后,仔细分析了一下EMUI系统 跟 Harmony 系统的区别,发现Harmony系统新增了纯净模式,这是EMUI系统所没有的功能,可以尝试判断是否存在纯净模式来区分这两个系统
/**
* 判断是否鸿蒙系统
* [url=home.php?mod=space&uid=3142012]@param[/url] context
* @return
*/
public static boolean isHarmony(Context context) {
try {
Class<?> accountAbilityClass = Class.forName("ohos.aafwk.ability.Ability");
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setPackage("com.huawei.systemmanager");
intent.setComponent(new ComponentName("com.huawei.systemmanager",
"com.huawei.systemmanager.puremode.PureModeActivity"));
PackageManager packageManager = context.getPackageManager();
List<ResolveInfo> list = packageManager.queryIntentActivities(intent,
PackageManager.MATCH_DEFAULT_ONLY);
return list.size() > 0;
} catch (Throwable e) {
e.printStackTrace();
return false;
}
}
经过测试,上述方案在Harmony系统、EMUI系统的华为与荣耀手机中,是可以正确判断出是否是Harmony系统,当然在非华为/荣耀手机中能够更加快速地判断出是非鸿蒙系统。
二、方案2:通过华为提供的特有类来判断系统品牌
京东在鸿蒙系统一出来就推出了适配鸿蒙系统的app, 想必肯定是在原有的京东android app的基础上增加调用鸿蒙系统独有的功能特性而已,因为要想整个app重新用Harmony Api去开发,肯定是没法这么快就推出了的,那么京东app里面应该会存在判断是否是鸿蒙系统的代码,结果下载京东app一探究竟,发现还真有判断代码:
private static final String HARMONY_OS = "harmony";
public static boolean isHarmonyOS() {
try {
Class clz = Class.forName("com.huawei.system.BuildEx");
Method method = clz.getMethod("getOsBrand");
return HARMONY_OS.equals(method.invoke(clz));
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
测试上述代码,发现也是可以完美地判断出是Android系统或者是Harmony 系统,真是前人栽树,后人乘凉!
原作者:潇曜
|