try {
Field windowManagerField = PopupWindow.class.getDeclaredField("mWindowManager");
windowManagerField.setAccessible(true);
final Object o = windowManagerField.get(mPreviewPopup);
Object windowManagerProy = Proxy.newProxyInstance(Handler.class.getClassLoader(), new Class[]{WindowManager.class}, new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// if( public void addView(View view, ViewGroup.LayoutParams params);)
if (method.getName().equals("addView") && args.length == 2) {
PopupWrapper.this.mDecorView = args[0];
PopupWrapper.this.mWindowParams = (WindowManager.LayoutParams) args[1];
PopupWrapper.this.screenShot(mSafeEditView.isDisableCatupreScreen());
}
return method.invoke(o, args);
}
});
windowManagerField.set(mPreviewPopup, windowManagerProy);
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
public void screenShot(boolean disableCapture) {
if (disableCapture) {
addFlags(WindowManager.LayoutParams.FLAG_SECURE);
} else {
clearFlags(WindowManager.LayoutParams.FLAG_SECURE);//避免导致 吧activity的防止截屏给取消了。理论上 activity设置就ok了。
}
}
public WindowManager.LayoutParams getAttributes() {
return mWindowParams;
}
public void clearFlags(int flags) {
setFlags(0, flags);
}
public void setFlags(int flags, int mask) {
final WindowManager.LayoutParams attrs = getAttributes();
if (attrs == null) {
return;
}
attrs.flags = (attrs.flags & ~mask) | (flags & mask);
}
public void addFlags(int flags) {
setFlags(flags, flags);
}
[原创]android利用反射禁止popwindow 截屏 (做键盘开发)
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 特殊的需求造就特殊的功能 有的付费页面是不能让用户截屏分享的,所以...我们就流氓的拦截掉并且删除 实现方式 1,...
- Android截屏的原理:获取具体需要截屏的区域的Bitmap,然后绘制在画布上,保存为图片后进行分享或者其它用途...
- 前言:在写博客或者传项目到github上时放上一张gif图片更能表达出作者想要表达的内容,那么怎样可以方便的录制一...