另辟蹊径屏蔽截图限制

  • ~2.26K 字

先前有个项目代码需要做代码审计,因此将大部分代码打包成library调用了,包括BaseActivity,项目当时做等保,屏蔽了截图功能,目前需要恢复.

屏蔽截图

首先讲如何屏蔽截图,一般只需要针对Activity设置Flag为FLAG_SECURE即可

我们选择在BaseActivityonCreate方法中处理,这样所有继承的子类都实现了屏蔽截图.

1
2
3
4
5
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SECURE);
}

此时再截图就会提示“当前界面涉及隐私内容,不允许截屏”

解除截屏限制

解除方法很简单,直接去掉上述Flag即可,但是目前的项目存在的问题是BaseActivitylibrary中,没有办法直接修改aar中的代码,或者说修改aar中的代码太麻烦了,那么有没有更简单的方法呢?答案是有的:

在我的Application中有用到这样一行代码

1
registerActivityLifecycleCallbacks(activityLifecycleCallbacks);

注册了所有activity的生命周期监听,可以用来处理应用切换到前台后台的监听,做一些诸如判断网络状态重连等。

1
2
3
4
5
6
7
8
9
public interface ActivityLifecycleCallbacks {
void onActivityCreated(Activity activity, Bundle savedInstanceState);
void onActivityStarted(Activity activity);
void onActivityResumed(Activity activity);
void onActivityPaused(Activity activity);
void onActivityStopped(Activity activity);
void onActivitySaveInstanceState(Activity activity, Bundle outState);
void onActivityDestroyed(Activity activity);
}

既然如此,我们直接在onActivityCreated的时候处理不就行了吗?

1
2
3
4
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
}

事实证明,并非如此。onActivityCreated确实会在onCreate之后调用,但是却是在super.onCreate(savedInstanceState);之后就已经调用了,我们的addFlags代码是在其后面写的,所以整个流程是

[onCreate的super.onCreate]{.label}

[onActivityCreated的clearFlags]{.label .warning}

[onCreate的addFlags]{.label .danger}

顺序不对,自然无法生效,所以我们只能在onActivityStarted中处理了

1
2
3
4
5
6
7
8
9
10
11
12
13
@Override
public void onActivityStarted(Activity activity) {
//无法编辑lib中的QFLibBaseActivity,直接在这里处理
activity.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_SECURE);
if (activityCount == 0) {
isForeground = true;
INSLog.e("logan", "app回到前台,开始更新状态");
Intent intent = new Intent();
intent.setAction(QFMainActivity.ACTION_REFRESH_NETWORK_STATE);
sendBroadcast(intent);
}
activityCount++;
}

然后我们就能正常截图了。

赞助喵
非常感谢您的喜欢!
赞助喵
分享这一刻
让朋友们也来瞅瞅!