aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑

本文主要是介绍aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景:

有学员朋友在学习马哥的分屏pip自由窗口专题时候,做相关分屏做小桌面项目时候,因为原来课程版本是基于android 13进行的讲解的,但是现在公司已经开始逐渐进行相关的android 14的适配了,但是android 14这块相比android 13还是有一些差异,适配起来有点难度,刚好借此机会给大家分享一下。
在这里插入图片描述分屏小桌面最后成果:
在这里插入图片描述

差异核心点

aosp13版本上
这个地方是有直接的splitscreen可以获取,所以当时使用的是splitscreen
在这里插入图片描述
在这里插入图片描述后面在SplitScreen加入了相关的接口

在这里插入图片描述

aosp14版本上
可以看出和aosp13版本确实差异有点大,已经直接看不到对应的SplitScreen相关的接口了
在这里插入图片描述
那么如何进行修改呢?

aosp14适配方案思路

切入点:
目标就是为了可以调用ISplitScreen相关接口,aosp13的SplitScreen其实本质也是调用的ISplitScreenImpl的接口
在这里插入图片描述
ISplitScreenImpl实际是ISplitScreen的aidl的服务端,所以目的是用来提供给桌面等可以跨进程通讯用的。那么桌面本身可以启动分屏,本质就是因为传递了相关的ISplitScreen的binder对象给了桌面,所以顺着找这个ISplitScreen的binder实体传递思路寻找到,其实如下代码进行binder对象传递:
都是基于aosp14代码
frameworks/base/libs/WindowManager/Shell/src/com/android/wm/shell/sysui/ShellController.java
在这里插入图片描述
可以看到是在这里进行的putBinder对象,放到了Bundle传递到了launcher进行
在这里插入图片描述

对于ISplitScreen相关binder的key是如下:
在这里插入图片描述
知道了这个key然后代码中grep结果如下:
在这里插入图片描述看看这个方法:
在这里插入图片描述

再看看createExternalInterface
在这里插入图片描述
哈哈是不是看到和aosp13版本一样的对象了。
再看看addExternalInterface
在这里插入图片描述
明显看出了addExternalInterface就是前面源头

在这里插入图片描述到这里就已经基本上找到了可以获取ISplitScreen接口方法了

解决获取ISplitScreen接口案例

只需要在params填入数据完成后在获取既可以
在这里插入图片描述
打印结果如下:
在这里插入图片描述
正常获取了接口,接下来也可以通过ISplitScreen接口直接进行接口调用

在这里插入图片描述

本文章更多详细代码和资料需要购买课程获取
hal+perfetto+surfaceflinger
https://mp.weixin.qq.com/s/LbVLnu1udqExHVKxd74ILg
在这里插入图片描述

私聊作者+v(androidframework007)

其他课程七件套专题:在这里插入图片描述
点击这里
https://mp.weixin.qq.com/s/Qv8zjgQ0CkalKmvi8tMGaw

视频试看:
https://www.bilibili.com/video/BV1wc41117L4/

这篇关于aosp14的分屏接口ISplitScreen接口获取方式更新-学员疑问答疑的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1004708

相关文章

Springboot处理跨域的实现方式(附Demo)

《Springboot处理跨域的实现方式(附Demo)》:本文主要介绍Springboot处理跨域的实现方式(附Demo),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不... 目录Springboot处理跨域的方式1. 基本知识2. @CrossOrigin3. 全局跨域设置4.

springboot security使用jwt认证方式

《springbootsecurity使用jwt认证方式》:本文主要介绍springbootsecurity使用jwt认证方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录前言代码示例依赖定义mapper定义用户信息的实体beansecurity相关的类提供登录接口测试提供一

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

springboot security之前后端分离配置方式

《springbootsecurity之前后端分离配置方式》:本文主要介绍springbootsecurity之前后端分离配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的... 目录前言自定义配置认证失败自定义处理登录相关接口匿名访问前置文章总结前言spring boot secu

SpringBoot中封装Cors自动配置方式

《SpringBoot中封装Cors自动配置方式》:本文主要介绍SpringBoot中封装Cors自动配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录SpringBoot封装Cors自动配置背景实现步骤1. 创建 GlobalCorsProperties

Flutter打包APK的几种方式小结

《Flutter打包APK的几种方式小结》Flutter打包不同于RN,Flutter可以在AndroidStudio里编写Flutter代码并最终打包为APK,本篇主要阐述涉及到的几种打包方式,通... 目录前言1. android原生打包APK方式2. Flutter通过原生工程打包方式3. Futte

在C#中调用Python代码的两种实现方式

《在C#中调用Python代码的两种实现方式》:本文主要介绍在C#中调用Python代码的两种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#调用python代码的方式1. 使用 Python.NET2. 使用外部进程调用 Python 脚本总结C#调

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

使用Python实现获取网页指定内容

《使用Python实现获取网页指定内容》在当今互联网时代,网页数据抓取是一项非常重要的技能,本文将带你从零开始学习如何使用Python获取网页中的指定内容,希望对大家有所帮助... 目录引言1. 网页抓取的基本概念2. python中的网页抓取库3. 安装必要的库4. 发送HTTP请求并获取网页内容5. 解

Vue中组件之间传值的六种方式(完整版)

《Vue中组件之间传值的六种方式(完整版)》组件是vue.js最强大的功能之一,而组件实例的作用域是相互独立的,这就意味着不同组件之间的数据无法相互引用,针对不同的使用场景,如何选择行之有效的通信方式... 目录前言方法一、props/$emit1.父组件向子组件传值2.子组件向父组件传值(通过事件形式)方