android 13 允许/禁止截屏

— a/android13/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/android13/frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -1601,8 +1601,16 @@ public class PhoneWindowManager implements WindowManagerPolicy {
};

 private void handleScreenShot(@WindowManager.ScreenshotType int type,
  •        @WindowManager.ScreenshotSource int source) {
    
  •    mDefaultDisplayPolicy.takeScreenshot(type, source);
    
  •        @WindowManager.ScreenshotSource int source) {        
    
  •           //add by psj 2024/01/24
    
  •           boolean isScreenshotEnabled = SystemProperties.get("persist.sys.settings_screenshot_control","1").equals("1") ? true : false;
    
  •           if(isScreenshotEnabled){
    
  •                   Log.d(TAG,"==handleScreenShot==true");
    
  •           mDefaultDisplayPolicy.takeScreenshot(type, source);             
    
  •           }else{
    
  •                   Log.d(TAG,"==handleScreenShot==false");
    
  •           }
    
  •           //===================================================================================
    

    }

    @Override

### Android 禁止当前页面截屏的实现方法 在 Android 平台上,禁止当前页面截屏可以通过设置 `Window` 的标志位 `FLAG_SECURE` 来实现。此标志位会告知系统不要将窗口内容包含在屏幕截图或屏幕录制中[^1]。 以下是一个完整的实现方式: #### 方法一:通过 Java/Kotlin 实现 在 Android 原生开发中,可以使用以下代码来设置窗口为安全模式(禁止截屏): ```java import android.view.WindowManager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 设置窗口为安全模式,禁止截屏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE); setContentView(R.layout.activity_main); } ``` 上述代码中的 `FLAG_SECURE` 标志会阻止系统对当前窗口进行截屏操作,并且不会被录屏工具捕获[^1]。 #### 方法二:通过 UniApp + Vue2 实现 如果项目是基于 UniApp 和 Vue2 构建的,则可以通过以下代码实现禁止截屏功能: ```javascript // #ifdef APP-PLUS let osname = plus.os.name; if (osname === "Android") { var activity = plus.android.runtimeMainActivity(); plus.android.invoke( plus.android.invoke(activity, "getWindow"), "addFlags", 0x00002000 // FLAG_SECURE ); } // #endif ``` 这段代码通过调用 Android 的原生 API,在应用运行时动态设置窗口标志为 `FLAG_SECURE`,从而实现禁止截屏的功能[^2]。 #### 方法三:通过 HarmonyOS 实现 对于 HarmonyOS 开发环境,可以使用以下代码实现禁止截屏功能: ```typescript private context: common.BaseContext = getContext(this) as common.BaseContext; screenshots(bol: boolean) { window.getLastWindow(this.context) .then((windowClass: window.Window) => { try { windowClass.setWindowPrivacyMode(bol, (err: BusinessError) => { const errCode: number = err.code; if (errCode) { console.error(`Failed to set the window to privacy mode. Cause code: ${err.code}, message: ${err.message}`); return; } console.info('Succeeded in setting the window to privacy mode.'); }); } catch (exception) { console.error(`Failed to set the window to privacy mode. Cause code: ${exception.code}, message: ${exception.message}`); } }) .catch(() => {}); } ``` 在此实现中,`setWindowPrivacyMode` 方法用于开启或关闭隐私模式,从而控制是否允许截屏[^3]。 #### 注意事项 1. **兼容性**:确保测试设备的操作系统版本支持 `FLAG_SECURE` 标志。部分定制 ROM 可能会对该标志的行为有所调整。 2. **生命周期管理**:在页面销毁时,建议移除 `FLAG_SECURE` 标志以避免不必要的性能开销。 3. **权限要求**:某些设备可能需要额外的权限才能完全禁用截屏功能。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值