Android12 SystemUI QS面板新增截屏功能

ops/2024/10/9 15:23:31/

问题:Android12 中SystemUI版本,QS下拉快捷面板式没有截屏功能的。
需求:客户要求在项目中实现下拉快捷面板具备一键截屏功能

目前自己只针对Android12 mtk/RK平台实践过,接触的全志平台暂未实验验证。

文章目录

  • 前言
  • 一、实际实现效果
  • 二、修改点
    • 1.新增文件
    • 2.修改文件
  • 三、基础知识储备
    • 基础知识内容了解
    • 相关资料参考:
      • 谷歌开源项目,SystemUI基础必备
      • 其它文章推荐
      • 源码查询平台
  • 四、需求实现
  • 五、总结
  • 六、源码资料


前言

Android12 中在SystemUI的QS面板添加截屏功能按钮,目前在RK和mtk 平台验证过,实现步骤基本一致


一、实际实现效果

![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/9577a485e11a404b8e1adfe2c86384a3.png在这里插入图片描述

视频效果如下

Android12 SystemUI新增截屏功能

二、修改点

1.新增文件

packages\apps\SystemUI\src\com\android\systemui\qs\tiles\ScreenShotTile.java
packages\apps\SystemUI\src\com\android\systemui\statusbar\policy\ScreenShotController.java
packages\apps\SystemUI\src\com\android\systemui\statusbar\policy\ScreenShotControllerImpl.java
packages\apps\SystemUI\res\drawable\ic_screenshot.xml

2.修改文件

packages\apps\SystemUI\src\com\android\systemui\qs\tileimpl\QSFactoryImpl.java
packages\apps\SystemUI\src\com\android\systemui\statusbar\policy\dragger\StatusBarPolicyModule.java    
packages\apps\SystemUI\res\values\config.xml

具体代码实现,可以在文章末尾下载源代码,查看具体修改

三、基础知识储备

我从个人角度从零到1过程中,特别对于刚入手SystemUI,对SystemUI内容、架构、布局不熟悉的同学,更要针对SystemUI基本知识充电了解。方便当前需求实现和后续相关功能的定制和需求实现。

基础知识内容了解

SystemUI是什么、SystemUI启动流程、SystemUI布局、SystemUI有哪些内容、SystemUI架构、SystemUI组件.

相关资料参考:

谷歌开源项目,SystemUI基础必备

谷歌安卓开源项目SystemUI Remind
谷歌安卓开源项目SystemUI doc文档
Dragger
Qs-Titles

以上官方资料其实介绍很详细了,看完后还是模棱两可很正常,建议多看几遍,品味品味流程,跟进代码。
下面是部分其它自己认为写的比较好的博客或者专题,可以借鉴看看。 建议多看几遍,理解更为透彻了,然后跟一下代码流程,收获会是巨大的。

其它文章推荐

SystemUI 架构分析
深入理解SystemUI
SystemUI下拉框自定义(Android9.0)
SystemUI栏目(MTK平台)
SystemUI专题一
SystemUI专题二

源码查询平台

SystemUI源码查询

四、需求实现

从三中的相关基础准备,思路其实都很清晰了的,下面是我自己思路相关,来实现这个需求。
在QS面板中,已经有现成的功能,比如投屏功能,那么我们找到投屏相关代码和分析的流程来实现需求就可以了。
这里涉及到几个类:

  • QSFactoryImpl:在 SystemUI 中,QSFacturer 工厂的仅有一个实现,即QSFactoryImpl中的默认工厂 ( ) CurrentTilesInteractorImpl
  • QSTileImpl:抽象实现QSTile,为所有图块提供基本的通用行为。还为不同类型的实现扩展Icon。当前在 SystemUI 子类中定义的所有图块均来自此实现。

下面先分析投屏的部分代码

继承QSTileImpl

/** Quick settings tile: Cast **/
public class CastTile extends QSTileImpl<BooleanState> {

创建的地方

private final Provider<CastTile> mCastTileProvider;
....@Injectpublic QSFactoryImpl(.....Provider<CastTile> castTileProvider,...) {mCastTileProvider = castTileProvider;}private QSTileImpl createTileInternal(

http://www.ppmy.cn/ops/95082.html

相关文章

2024爱分析·AI Agent开发管理平台市场厂商评估报告:火山引擎

01研究范围定义 大模型浪潮席卷全球&#xff0c;AI Agent作为这股浪潮中的新星正在取代Copilot&#xff0c;成为大模型应用的主流形态之一&#xff0c;以其惊人的速度和影响力重塑科技和商业的版图。 AI Agent是指以大模型为驱动&#xff0c;具有自主理解感知、规划、记忆和使…

十九、中介者模式

文章目录 1 基本介绍2 案例2.1 Developer 抽象类2.2 FrontendDeveloper 类2.3 BackendDeveloper 类2.4 Mediator 接口2.5 ProjectManager 类2.6 Client 类2.7 Client 类的运行结果2.8 总结 3 各角色之间的关系3.1 角色3.1.1 Colleague ( 同事 )3.1.2 ConcreteColleague ( 具体的…

物理网卡MAC修改器v3.0-直接修改网卡内部硬件MAC地址,重装系统不变!

直接在操作系统里就能修改网卡硬件mac地址&#xff0c;刷新网卡mac序列号硬件码机器码&#xff0c;电脑主板集成网卡&#xff0c;pcie网卡&#xff0c;usb有线网卡&#xff0c;usb无线网卡&#xff0c;英特尔网卡&#xff0c;瑞昱网卡全支持&#xff01; 一键修改mac&#xff0…

System V IPC奥秘:解锁共享内存、消息队列与信号量的高效通信之路

&#x1f351;个人主页&#xff1a;Jupiter. &#x1f680; 所属专栏&#xff1a;Linux从入门到进阶 欢迎大家点赞收藏评论&#x1f60a; 目录 &#x1f351;system V共享内存 &#x1f352;共享内存的原理共享内存数据结构查看和删除共享内存资源的命令 &#x1f33b;共享内存…

基因组学系列4:参考转录本数据库MANE

1. 参考转录本数据库MANE简介 为了促进临床参照的一致性&#xff0c;美国国家生物技术信息中心( NCBI)和欧洲分子生物学实验室-欧洲生物信息学研究所(EMBL-EBI)合作发布了参考转录本数据库MANE&#xff08;Matched Annotation from the NCBI and EMBL-EBI&#xff09;&#xf…

Ubuntu下交叉编译器工具链的安装方法

本篇文章记录Ubuntu下交叉编译器工具链的安装方法。 目录 一、交叉编译器 1、交叉编译器简介 2、获取交叉编译器 3、安装交叉编译器 4、安装相关库 二、结语 一、交叉编译器 1、交叉编译器简介 交叉编译器是一种编译器&#xff0c;它在一种平台上运行&#xff0c;但生成…

阿里云注册、认证、短信资质、签名、模板申请过程

一、帐号注册 输入“帐号密码注册”中的相关信息即可。 手机号是必须的&#xff0c;先确定好手机号。 正常的可以直接注册成功的。 二、实名认证 注册成功之后&#xff0c;就可以点击上述的“快速实名认证”。 这次选择的是“企业认证”。 有几种方式&#xff0c;如下&#x…

Jenkins链接Gitlab(HttpSSH方式)

文章目录 前言一、安装必要插件1、安装git2、安装Jenkins插件 二、配置git1、http方式&#xff08;1&#xff09;基础配置&#xff08;http方式配置凭证&#xff09;&#xff08;2&#xff09;测试 2、SSH方式配置凭证 总结 前言 为避免汉化导致的显示差异&#xff0c;以下操作…