1. 折叠屏平行视界适配的现状与挑战
折叠屏设备这两年发展迅猛,各大厂商都在推陈出新。作为开发者,最头疼的就是如何让应用在不同品牌的折叠屏上都能完美运行。我去年接手公司旗舰App的折叠屏适配项目时,发现华为、OPPO、vivo这些厂商对平行视界的实现方案各不相同,光是理清各家的技术路线就花了两周时间。
目前主流的适配方案有两种:Google主导的Embedding方案和国内厂商推的EasyGo。Embedding方案基于AndroidX的WindowManager库,是Google官方推荐的做法;EasyGo则是国内厂商联盟搞的一套标准,华为、vivo等都在用。实测下来,Embedding的API更丰富,但EasyGo在国内设备的兼容性更好。
最让人抓狂的是厂商之间的优先级冲突。比如在vivo设备上,EasyGo的优先级高于Embedding;而OPPO的新机型又反过来优先支持Embedding。更坑的是小米12之后的机型只认Embedding,完全不理EasyGo。这就导致我们不得不同时维护两套代码,还要处理各种奇怪的兼容性问题。
2. 多厂商兼容性策略实战
2.1 检测设备支持的方案类型
首先要解决的是如何判断当前设备支持哪种方案。我封装了一个工具类,可以自动检测设备厂商和可用方案:
public class FoldableUtils {
// 检测设备厂商
public static String getDeviceBrand() {
return Build.BRAND.toLowerCase(Locale.ROOT);
}
// 检测Embedding支持状态
public static boolean isEmbeddingSupported(Context context) {
return SplitController.getInstance(context)
.getSplitSupportStatus() == SplitController.SplitSupportStatus.SPLIT_AVAILABLE;
}
// 检测EasyGo支持状态(各厂商实现不同)
public static boolean isEasyGoSupported() {
try {
Class.forName("com.huawei.android.multiscreen.MultiScreenManager");
return true; // 华为
} catch (Exception e) {
// 其他厂商检测逻辑...
}
return false;
}
}
2.2 处理方案优先级冲突
针对不同厂商的优先级问题,我的经验是建立一个优先级矩阵:
5440


&spm=1001.2101.3001.11974&articleId=159104215&d=1&t=3&u=a23548d307be4ed7988d5afe6eba2010)

被折叠的 条评论
为什么被折叠?



