前提:使用MediaProjectionManager录屏方案。
问题:会截入自定义悬浮框
解决方案
1.本质上得修改framework层代码surfaceflinger去除悬浮框,在画布中就去除该悬浮框。
优:自定义、有效,
缺:涉及底层,修改成本大,适配性差
2.如果不想修改framework层,那看看国内手机系统其实都是自带的录屏软件,方案一说白了就是匹配view的名字是不是在某个白名单里面,那我们可以适配各个手机系统,改成跟他们自带录屏软件同样的名字,这样又不用修改framework,而且对我们而言就是根据手机系统差异,构建不同的layoutparams。参考了这位大佬写的android 录屏不录制自身的悬浮框,下面把各个厂商的title差异写一下。

  • miui——com.miui.screenrecorder
  • emui——ScreenRecorderTimer
  • oppo——com.coloros.screenrecorder.FloatView
  • vivo——screen_record_menu
  • oneplus——op_screenrecord
  • flyme——SysScreenRecorder
  • 红魔——NubiaScreenDecorOverlay
  • 黑鲨——com.blackshark.screenrecorder
  • ROG——com.asus.force.layer.transparent.SR.floatingpanel
  • TODO:三星的暂时没有搜到,后续可能会补充

除了上面的title外,有些手机系统可能还得修改一下其他参数,

//小米:try {params.flags = params.flags | WindowManager.LayoutParams.FLAG_DITHER;} catch (Exception e) {e.printStackTrace();}
//一加,并且Build.VERSION.SDK_INT == 30try {Field privateflagField = layoutParams.getClass().getDeclaredField("PRIVATE_FLAG_IS_ROUNDED_CORNERS_OVERLAY");privateflagField.setAccessible(true);Field flagField = params.getClass().getDeclaredField("privateFlags");flagField.setAccessible(true);flagField.set(params, (int)privateflagField.get(layoutParams.getClass()));} catch (Exception e) {e.printStackTrace();}
//三星try {Method semAddExtensionFlags = params.getClass().getMethod("semAddExtensionFlags", Integer.TYPE);Method semAddPrivateFlags = params.getClass().getMethod("semAddPrivateFlags", Integer.TYPE);semAddExtensionFlags.invoke(params, -2147352576);semAddPrivateFlags.invoke(params, params.flags);} catch (Exception e) {e.printStackTrace();}
//ROG
layoutParams.memoryType |= 0x10000000;
//魅族try {Class MeizuParamsClass = Class.forName("android.view.MeizuLayoutParams");Field flagField = MeizuParamsClass.getDeclaredField("flags");flagField.setAccessible(true);Object MeizuParams = MeizuParamsClass.newInstance();flagField.setInt(MeizuParams, flagValue);Field mzParamsField = params.getClass().getField("meizuParams");mzParamsField.set(params, MeizuParams);} catch (IllegalAccessException | ClassNotFoundException | NoSuchFieldException | InstantiationException e) {try{Field mzParamsField = params.getClass().getDeclaredField("meizuFlags");mzParamsField.setAccessible(true);mzParamsField.setInt(params, flagValue);} catch (Exception e) {e.printStackTrace();}}

android录屏时不截入自定义悬浮框相关推荐

  1. 录屏固定帧率 Android,Android 录屏时控制帧率

    Android 录屏时通常使用 MediaCodec 做编码器,MediaCodec 会创建一个 Surface 提供给 VirtualDisplay 填内容.通常,Android系统系统刷新速率是6 ...

  2. Android 录屏时的帧率控制

    https://www.jianshu.com/p/f2e4db2fb211 https://www.jianshu.com/p/b61ea6783b07 https://blog.csdn.net/ ...

  3. Android录屏分析(Android12源码)

    Android录屏分析 目录 Android录屏分析 prepare方法(准备录制) MediaProjection.MediaRecorder.VirtualDisplay的介绍 开始与结束 缩略图 ...

  4. Android 录屏服务使用(源码)

    Android 录屏服务使用(源码) 从Android 5.0开始,可以对手机进行录屏,使用场景:如错误场景的视频上传,简单屏幕获取等,下面贴出使用用例和对使用的类一个简单的介绍 - MediaPro ...

  5. Win10 自带【屏幕录制】功能(win + G)----(附带:录屏时没有声音,声音不清楚 问题解决;---提取视频中的音频)

    目录 ■前言 ■各种工具的快捷键,以及使用 1.Win+V 笔记 2.Win+G 进入游戏模式 (即,运行Xbox Game Bar) 3.Win+Tab 虚拟桌面 4.Win+Shift+S 截屏工 ...

  6. Mac基础操作教程:Mac电脑如何在录屏时录入声音?

    我们经常因为工作需要而对Mac电脑进行录屏操作,但有些新手用户录屏后发现,屏幕里没有声音,这是因为你没有打开麦克风,下面分享Mac电脑在录屏时录入声音教程. 1.点击"启动台", ...

  7. android 屏幕录制方案,Android录屏的三种解决方案

    本文总结三种用于安卓录屏的解决方案: adb shell命令screenrecord MediaRecorder, MediaProjection MediaProjection , MediaCod ...

  8. android录屏软件

    android录屏软件 系统类型:Android手机(平板) 软件大小:1KB 软件简介:通过USB链接android.用鼠标键盘控制你的android 安装步骤: 1.安装的Android SDK( ...

  9. Android录屏并利用FFmpeg转换成gif(一)录屏

    Android录屏并利用FFmpeg转换成gif(一) 录屏 写博客时经常会希望用一段动画来演示app的行为,目前大多数的做法是在电脑上开模拟器,然后用gif录制软件录制模拟器屏幕,对于非开发人员来讲 ...

最新文章

  1. onblur 对象失去焦点事件
  2. 7.3.4 异步IO(Asynchronous I/O)
  3. 学习笔记(07):Python网络编程并发编程-客户端与服务端代码bug修复
  4. 响应式设计(Response Web Design)浅谈
  5. dell服务器报内存配置不正确,DELL 服务器系统提示错误解决的若干办法
  6. symfony2的中文视频教程更新中(原创),对Symfony感兴趣的学员可以看下
  7. pandas.DataFrame的pivot()和unstack()实现行转列
  8. 概率图模型笔记(二) 隐马尔科夫模型(Hidden Markov Model)
  9. php二分查找例题,PHP实现的二分查找算法实例分析
  10. 餐饮加盟推广遇到抖音下拉词框会碰撞出什么样的火花
  11. JS:callee属性
  12. android 获取用户名和密码,如何通过Android中的电子邮件地址获取用户名和密码
  13. 基于Python的DBC转Excel脚本
  14. houseprice_analysis_广州房子租售比分析(上)
  15. 天翼网关 ddns设置_超高并发服务网关架构设计与实现
  16. python如何用opencv把一个视频按每10秒一小段切割
  17. Pandas基础入门(一)
  18. 从程序员到项目经理:懂电脑更要懂人脑
  19. 舵机 - 什么是舵机
  20. 主板电容损坏导致台式机开机风扇转无显示信号输出

热门文章

  1. ABB机器人系统输入输出信号System Input和Output详解(二)
  2. 容联云Q3同比增长44.3%,CC+UC业务收入占比突破60%
  3. 区块链专家与媒体面对面 | “区块链让数据产生价值”
  4. verilog设计简易正弦波信号发生器_采用集成运放和分立元件相结合的方式,利用迟滞比较器电路产生方波信号,以及充分利用差分电路进行电路转...
  5. Android内存泄漏查找和解决
  6. Git programmer summarise
  7. Maven安装和依赖管理详解
  8. Android TV 智能电视/盒子 APP 开发焦点控制 两种方法实例
  9. 图像算法:数字图像处理程序大全
  10. 软考网络工程师(五)