当前位置: 首页 > news >正文

安卓demo-折叠屏平行视界适配(embedding方案)

功能描述

2个活动页左右分屏展示。可适配的厂商有:华为/vivo/oppo/荣耀/三星/小米。大部分安卓系统都支持embedding。

步骤

1、添加em依赖的WindowManager包,目前官方稳定版是window1.3

implementation('androidx.window:window:1.3.0')

2、使用jetpack startup库在加载应用的其他组件和启动activity之前执行初始化。这里使用startup加载em配置文件

implementation('androidx.startup:startup-runtime:1.2.0')

3、配置分屏规则main_split_config.xml,将其放到res/xml目录下

<!-- main_split_config.xml --> <resources xmlns:window="http://schemas.android.com/apk/res-auto"> <!-- Define a split for the named activities. --> <SplitPairRule window:clearTop="true" window:splitMinWidthDp="600" window:splitRatio="0.5"> <SplitPairFilter window:primaryActivityName=".MainActivity" window:secondaryActivityName=".AActivity" /> <SplitPairFilter window:primaryActivityName=".MainActivity" window:secondaryActivityName="*" /> </SplitPairRule> <!-- Specify a placeholder for the secondary container when content is not available. --> <SplitPlaceholderRule window:placeholderActivityName=".PlaceholderActivity" window:splitMinWidthDp="600" window:splitRatio="0.33"> <ActivityFilter window:activityName=".PlaceholderActivity" /> </SplitPlaceholderRule> <!-- Define activities that should never be part of a split. Note: Takes precedence over other split rules for the activity named in the rule. --> <ActivityRule window:alwaysExpand="true"> <ActivityFilter window:activityName=".FullActivity" /> </ActivityRule> </resources>

4、创建分屏启动类去加载xml分屏配置文件main_split_config.xml

package com.lwj.embeddingtest; import android.content.Context; import android.util.Log; import androidx.annotation.NonNull; import androidx.startup.Initializer; import androidx.window.embedding.RuleController; import androidx.window.embedding.SplitController; import java.util.Collections; import java.util.List; public class SplitWindowInitializer implements Initializer<RuleController> { private static final String TAG = "SplitWindowInitializer"; @NonNull @Override public RuleController create(@NonNull Context context) { Log.d(TAG, "create: is support embedding = " + SplitController.getInstance(context).getSplitSupportStatus()); RuleController ruleController = RuleController.getInstance(context); ruleController.setRules(RuleController.parseRules(context, getResId(context, "xml", "main_split_config"))); return ruleController; } @NonNull @Override public List<Class<? extends Initializer<?>>> dependencies() { return Collections.emptyList(); } public static int getResId(Context context, String type, String name) { return context.getResources().getIdentifier(name, type, context.getPackageName()); } }

5、在应用的AndroidManifest.xml里面增加provider在应用创建的时候去调分屏启动类加载xml分屏相关配置信息

<provider android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" android:exported="false" android:multiprocess="true" tools:node="merge"> <meta-data android:name="com.lwj.embeddingtest.SplitWindowInitializer" android:value="androidx.startup" /> </provider>

6、在应用的AndroidManifest.xml里面增加一些其他embedding配置

<meta-data android:name="embedded" android:value="true" /> <property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_ENABLED" android:value="true" /> <!-- 允许系统 activity 嵌入--> <property android:name="android.window.PROPERTY_ACTIVITY_EMBEDDING_ALLOW_SYSTEM_OVERRIDE" android:value="true" />

状态监听&获取

可通过onConfigurationChanged来监听平行视界状态变化,通过ActivityEmbeddingController.getInstance(this).isActivityEmbedded(this));来判断当前activity是否处于平行视界状态

@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); Log.d(TAG, "onConfigurationChanged: " + ActivityEmbeddingController.getInstance(this).isActivityEmbedded(this)); }

效果视频

embedding分屏效果

代码

https://gitee.com/flying-guy/daily-practice/tree/master/AndroidProject/EmbeddingTest

遇到的问题

  • 小米12及其以上版本不兼容easygo方案,只兼容embedding方案
  • 系统设置里面没有开关打开关闭平行视界模式,适配以后startactivity屏幕尺寸够大且匹配到了就会开启分屏,没找到相关api
  • easygo方案和embedding方案同时存在时可能会冲突。

vivo官网说的是需要联系关一个,vivo优先级easygo>embedding

oppo是系统根据ROM的版本优先支持原生的em,即优先级embedding>easygo

荣耀也是easygo>embedding,不过荣耀可以在xml里面增加属性配置增加em优先级

<manifest xmlns:android="http://schemas.android.com/apk/res/android"> <application> <property android:name="com.hihonor.window.PROPERTY_ACTIVITY_EMBEDDING_SPLITS_FIRST" android:value="true" /> </application> </manifest>

相关官方文档

华为easygo适配文档

文档中心

vivo easygo&折叠屏相关文档

vivo开放平台

oppo easygo开发文档

OPPO 开放平台-OPPO开发者服务中心

oppo embedding开发文档

OPPO 开放平台-OPPO开发者服务中心

荣耀easygo开发文档https://developer.honor.com/cn/docs/adaptation_guide/guides/mw_adaptation_guide

荣耀embedding开发文档

https://developer.honor.com/cn/docs/adaptation_guide/guides/ae_adaptation_guide

小米embedding开发文档

文档中心

安卓官网embedding

Activity 嵌入 | Views | Android Developers

折叠屏适配金标联盟

金标联盟 | ITGSA | 移动智能终端生态联盟

三星embedding适配

三星远程开发测试平台-Activity embedding(应用内分屏)适配指导

windowx变更(embedding主要依赖windowx里面的方法,其中androidx.window:window:1.1.0-alpha02和androidx.window:window:1.3.0差异较大,现在实现的方案是使用稳定版包androidx.window:window:1.3.0)

WindowManager | Jetpack | Android Developers

easygo

easygo可参考华为官方文档,一套下来可适配华为、oppo、vivo、荣耀。不过与embedding相比,api没embedding那么多,稳定性差点,比如平行视界多进程时,进程间跳转容易跳不回原来的进程直接退回桌面。

http://www.jsqmd.com/news/761333/

相关文章:

  • 2026PCBA清洗机怎么选:离线清洗机、过炉治具清洗机、LED清洗机、PCBA在线水洗机、PCB在线清洗机、PCB清洗机选择指南 - 优质品牌商家
  • 如何在Vue Element Admin中实现全局异常捕获与友好提示:完整指南
  • 【限时解密】Dify农业专属调试工具箱V2.3:含土壤墒情校准插件、农机轨迹纠偏SDK及36小时应急响应通道(仅开放至本季度末)
  • 30岁男性BMI26原子化科学减腰围的庖丁解牛
  • Web AI服务API化:逆向工程与FastAPI实战指南
  • Storeon:180字节的终极状态管理解决方案 - 为什么你应该放弃Redux?
  • 【数据结构与算法】—顺序表(续)
  • 新手入门pid控制:用快马平台生成交互式教学代码理解参数调节
  • AWS EC2实例类型从t3.medium升级到t3.large怎么做?具体步骤有哪些?
  • 从摄像头到HDMI:手把手教你用Zynq-7000玩转视频缩放与拼接(含资源评估与移植指南)
  • AI应用开发实战:useai统一接口层架构设计与生产环境集成指南
  • Tiled地图编辑器:如何用5个核心功能打造专业级2D游戏地图
  • 模型预测控制与漏斗控制结合的鲁棒学习框架
  • Hepatology(IF=16.8)中国人民解放军总医院梁萍、于杰等团队:基于生物学可解释的多模态模型预测肝细胞癌局部肿瘤进展及肿瘤侵袭性
  • 告别本振泄漏:深入拆解双平衡吉尔伯特混频器为何是射频接收机的“优选结构”
  • Hermes Agent 上手体验:多 Agent、多 Gateway、多账号 OAuth,确实有点不一样
  • Arm CoreSight SoC-600调试电源控制架构与寄存器详解
  • CentOS7离线安装Mysql8
  • NetHack地牢生态系统解析:怪物间的互动与食物链
  • 终极DDIA中文翻译指南:从理论到实践的完整学习路径
  • 观察Taotoken按Token计费模式如何实现用量与成本的精准对应
  • Circuit如何实现零配置动态云编排?核心技术解析
  • V ) 连同这些运算**不构成向量空间**。主要违反的是标量乘法的**标量加法对向量的分配律**: 。这个定义的标量乘法只影响第一分量,而加法会“累加”第二分量
  • 数据结构与算法——图
  • LuaSocket LTN12模块:流式传输与过滤器的终极指南
  • 【数据结构与算法】——单链表(上)
  • gganimate完全指南:如何在R中创建惊艳的数据动画可视化
  • 通过Taotoken CLI工具一键配置多开发环境与团队密钥
  • 别再只会Ctrl+B了!IDEA 2023.3 UML类图高阶玩法:自定义视图与依赖分析实战
  • 如何使用React Native Elements打造专业级游戏商店界面:完整指南