Android 9.0 系统禁用截屏和录屏功能

本文详细介绍了在Android 9.0系统中如何禁用截屏和录屏功能,从ActivityThread.java的核心功能分析到Layer.cpp中禁用录屏的实现。通过在Activity的窗口添加FLAG_SECURE属性以及修改Layer.cpp的isSecure()方法,可以有效地阻止用户在特定应用中进行截屏和录屏操作。
摘要由CSDN通过智能技术生成

1.前言

 在9.0的系统rom产品开发中,在对于一些产品开发需求中,对系统截屏和录屏功能 要求去掉这些功能,不让用户截屏和录屏 保护
一个app的资源,所以就需要在系统中做限制不让截屏录屏,接下来具体实现相关功能

2.系统禁用截屏和录屏功能的核心类

    frameworks\native\services\surfaceflinger\Layer.cpp
    frameworks\base\core\java\android\app\ActivityThread.java

3.系统禁用截屏和录屏功能的核心功能分析和实现

ActivityThread 是一个非常重要的组件,它的作用就像是 Android 应用程序的灵魂,它处理着应用程序和活动中的大部分工作,例如创建新的应用程序实例、加载和管理类、创建新的活动
ActivityThread是Android应用的主线程(UI线程),说起ActivityThread,不得不提到Activity的创建、启动过程以及ActivityManagerService

 在系统中可以在app中禁用录屏和截屏功能,同时也可以通过在系统源码中禁止截屏和录屏的功能,首先我们看下如何在app应用中禁止截屏录屏的的功能,app中禁止录屏和截屏功能的相关源码如下

            @Override
            protected void onCreate(Bundle
  • 8
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
Android 9.0 及更高版本中,您可以使用 MediaProjection API 来设置应用程序禁用系统录屏。您可以通过以下方式实现: 1. 在您的 AndroidManifest.xml 文件中添加以下权限: ``` <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" /> ``` 2. 在您的 Activity 或 Service 中,使用以下代码请求媒体投影权限: ```java private static final int REQUEST_CODE_SCREEN_CAPTURE = 1; private MediaProjectionManager mProjectionManager; private MediaProjection mMediaProjection; private void requestScreenCapturePermission() { mProjectionManager = (MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE); startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE_SCREEN_CAPTURE); } @Override protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE_SCREEN_CAPTURE && resultCode == RESULT_OK) { mMediaProjection = mProjectionManager.getMediaProjection(resultCode, data); // 在此处执行禁用系统录屏的逻辑 } } ``` 3. 在获取到 MediaProjection 对象后,您可以使用 `mMediaProjection.createVirtualDisplay()` 方法创建一个虚拟显示器,并通过 `Display.FLAG_SECURE` 标志来禁用系统录屏: ```java private static final int DISPLAY_WIDTH = 720; private static final int DISPLAY_HEIGHT = 1280; private static final int DISPLAY_DPI = 320; private void createVirtualDisplay() { VirtualDisplay virtualDisplay = mMediaProjection.createVirtualDisplay( "MyVirtualDisplay", DISPLAY_WIDTH, DISPLAY_HEIGHT, DISPLAY_DPI, DisplayManager.VIRTUAL_DISPLAY_FLAG_OWN_CONTENT_ONLY | DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC | Display.FLAG_SECURE, null, null ); } ``` 这样,您就可以在您的应用程序中禁用系统录屏了。注意,这只会影响到 Android 9.0 及更高版本的系统。在之前的版本中,您无法禁用系统录屏
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安卓兼职framework应用工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值