Android13实现录屏或者投屏(用到VirtualDisplay)时去除某个图层

需求背景

在做Android系统应用开发的时候,有时候我们会遇到如下的需求:录屏时或投屏时不想录到某一个窗口,比如录屏应用,通常在录屏时都有一个控制录屏开始或暂停的工具栏,为了达到更好地一个录制效果,通常是需要在录制的视频中去掉这个工具栏的显示的。Android9以前的版本如何实现这个需求网上都有,这里提供两种方法在Android13上去实现这个需求。

方法一

修改涉及文件:

release/frameworks/native/services/surfaceflinger/Layer.cpp

话不多说,先把patch贴上

--- a/release/frameworks/native/services/surfaceflinger/Layer.cpp
+++ b/release/frameworks/native/services/surfaceflinger/Layer.cpp
@@ -644,6 +644,7 @@ void Layer::prepareClearClientComposition(LayerFE::LayerSettings& layerSettings,
     layerSettings.disableBlending = true;
     layerSettings.bufferId = 0;
     layerSettings.frameNumber = 0;
+    layerSettings.geometry.boundaries = FloatRect(0.f, 0.f, 0.f, 0.f);
 
     // If layer is blacked out, force alpha to 1 so that we draw a black color layer.
     layerSettings.alpha = blackout ? 1.0f : 0.0f;

下面来解释一下原理。可以看到这个patch只修改了一行代码,这行代码的意思呢,就是把这个layer的显示边界大小给改成0,显示区域大小变成0了,自然就无法显示了。那修改的是哪个layer呢?

带着这个问题,我们先来讲一下Android应用层添加Window的一种方法:

WindowManager windowManager = getSystemService(WindowManager.class);
windowManager.addView();

利用WindowManager的addView方法,这个方法需要传两个参数,

public void addView
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值