You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Android应用全局实现防截图功能并避免代码重复

全局实现Android应用屏蔽截图方案

当然可以!这种全局统一处理的需求非常实用,不用挨个修改几十页的Activity和Fragment,我们可以通过Application全局监听Activity生命周期的方式一步到位,完全符合你想要的"全局引用"思路。

核心实现思路

Android的Application类是应用的全局入口,我们可以通过它注册一个全局的ActivityLifecycleCallbacks,在每个Activity创建时自动给窗口设置禁止截图的系统Flag。而Fragment依附于Activity的窗口,会自动继承这个限制,无需额外处理。

具体步骤

1. 创建自定义Application类

实现ActivityLifecycleCallbacks接口,在onActivityCreated回调中统一设置禁止截图的Flag:

public class MyApp extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        // 注册全局Activity生命周期监听
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
                // 给每个Activity的窗口添加FLAG_SECURE,禁止截图/录屏
                if (activity.getWindow() != null) {
                    activity.getWindow().setFlags(
                        WindowManager.LayoutParams.FLAG_SECURE,
                        WindowManager.LayoutParams.FLAG_SECURE
                    );
                }
            }

            // 其他生命周期方法无需实现逻辑,留空即可
            @Override
            public void onActivityStarted(@NonNull Activity activity) {}
            @Override
            public void onActivityResumed(@NonNull Activity activity) {}
            @Override
            public void onActivityPaused(@NonNull Activity activity) {}
            @Override
            public void onActivityStopped(@NonNull Activity activity) {}
            @Override
            public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {}
            @Override
            public void onActivityDestroyed(@NonNull Activity activity) {}
        });
    }
}

2. 在Manifest中配置自定义Application

打开AndroidManifest.xml,指定你的自定义Application类:

<application
    android:name=".MyApp"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme">
    <!-- 你的所有Activity声明 -->
</application>

补充说明

  • Fragment自动生效:因为Fragment的视图是嵌入在所属Activity的窗口中的,只要Activity设置了FLAG_SECURE,其下所有Fragment的界面都会自动禁止截图,不需要单独处理Fragment。
  • 例外场景处理:如果某个特定Activity不需要屏蔽截图,可以在该Activity的onCreate方法中清除Flag:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // 取消当前Activity的截图限制
        getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
        setContentView(R.layout.activity_main);
    }
    
  • 独立窗口组件处理:如果你的应用中有Dialog、PopupWindow这类拥有独立窗口的组件,需要单独给它们的窗口设置FLAG_SECURE,示例:
    Dialog secureDialog = new Dialog(this);
    secureDialog.getWindow().setFlags(
        WindowManager.LayoutParams.FLAG_SECURE,
        WindowManager.LayoutParams.FLAG_SECURE
    );
    secureDialog.setContentView(R.layout.dialog_layout);
    secureDialog.show();
    
  • 效果说明:FLAG_SECURE是系统级别的限制,不仅会禁止系统截图工具,还会禁止第三方录屏软件,可靠性很高。

内容的提问来源于stack exchange,提问作者Aakash

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:42:46