如何在Android fragment中禁用屏幕捕获?

如何在Android fragment中禁用屏幕捕获?,android,android-fragments,screenshot,layoutparams,Android,Android Fragments,Screenshot,Layoutparams,是否可以禁用片段的屏幕捕获? 我知道下面的内容适用于活动课 onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE); } 但是如果我有一个片段出现在一个活动

是否可以禁用片段的屏幕捕获? 我知道下面的内容适用于活动课

onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
                WindowManager.LayoutParams.FLAG_SECURE);
}
但是如果我有一个片段出现在一个活动的顶部呢。我可以禁用屏幕捕获吗?我尝试在片段的onCreate()或onCreateView()方法中设置标志_SECURE,但它不起作用。我仍然可以拍屏幕截图。只有在父活动中添加标志时,我才能禁用它

另一方面,比如说,我在ParentActivity.java中有一个方法(它扩展了Activity)

在my ChildFragment.java中(它扩展了片段)

有什么想法吗


提前感谢执行您的
禁用屏幕捕获()
在恢复时调用
在创建视图时调用
,或者
在片段中附加的活动时调用
应该都可以-他们为我做了。在activitycreated
上执行调用可能不起作用,因为我认为只有在活动被重新创建时,在活动被销毁后才会调用钩子。然而,我没有试过那个

如果在
onCreateView
中执行该调用对您不起作用,您是否100%确定您的片段实际上已添加到活动中

对于
对话框片段
而言,它略有不同:

getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
        WindowManager.LayoutParams.FLAG_SECURE);

对话框片段
本身不是
对话框
本身,而是包含对一个对话框的引用,并在添加和删除片段时显示/取消它。对话框有自己的窗口,必须单独设置标志。

下面的代码适用于我

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    getActivity().getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
    Window window = getActivity().getWindow();
    WindowManager wm = getActivity().getWindowManager();
    wm.removeViewImmediate(window.getDecorView());
    wm.addView(window.getDecorView(), window.getAttributes());

}

如果我的片段是从片段扩展而不是DialogFragment呢?哦,对不起,我看错了问题。正在做一些研究并将重新回答。在onResume()或onActivityCreated()上禁用屏幕截图在片段中也不起作用。在我测试它们时,您尝试的所有方法都对我有效。你确定你的片段真的被添加到你的活动中了吗?我想是的。基本上我只有一个活动和一堆片段。我有一个片段切换器类,它用新片段替换当前片段,然后提交事务。表面上我看没问题。让我深入研究一下我的代码,我的期望是“安全”标志应用于整个视图UI层。SurfaceView的表面是一个单独的层,可以独立处理,但视图UI由应用程序合成,并作为一个实体交给系统合成器。你是一个好朋友:)你是否在扩展片段类中添加了此代码或保护了整个活动?在片段的开始或恢复入口点,基本上当你想禁用的时候。
getDialog().getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
        WindowManager.LayoutParams.FLAG_SECURE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
    getActivity().getWindow().setFlags(LayoutParams.FLAG_SECURE, LayoutParams.FLAG_SECURE);
    Window window = getActivity().getWindow();
    WindowManager wm = getActivity().getWindowManager();
    wm.removeViewImmediate(window.getDecorView());
    wm.addView(window.getDecorView(), window.getAttributes());

}