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);
}
网友评论