有没有办法完全阻止在Android中截取屏幕截图的能力?

时间:2013-08-22 23:32:58

标签: android screenshot screen-capture

我目前正在开发轻量级应用程序,在应用程序的一部分中,我想完全取消在Android中截取屏幕截图的能力。当我说截图时,我在谈论iPhone的“屏幕截图”功能。这是出于安全原因。我意识到有些应用程序允许Android用户也这样做,我想阻止这个功能。无论是禁用硬件按钮,冻结手机还是通过软件,任何方法都可以。

3 个答案:

答案 0 :(得分:1)

您可以使用LayoutParam FLAG_SECURE窗口。将其添加到您的onCreate方法:

if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.HONEYCOMB) {
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);
}

有关此主题的更多信息,请访问here

答案 1 :(得分:0)

WindowManager.LayoutParams.FLAG_SECURE方法之前使用setContentView(),然后 您必须在要保护的所有活动中添加此代码。

public void onCreate(Bundle bundle) {
    super.onCreate(bundle);
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
            WindowManager.LayoutParams.FLAG_SECURE);
    setContentView(R.layout.activity_main);
}

答案 2 :(得分:0)

在您的项目中添加一个这样的应用程序类,以防止整个应用程序被截屏(应用程序周围的所有活动和片段)。这是example project及下面我提到的核心代码-

public class MyApplicationContext extends Application {

    private  Context context;

    public void onCreate() {
        super.onCreate();
        context = getApplicationContext();
        setupActivityListener();
    }

    private void setupActivityListener() {
        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
                activity.getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE, WindowManager.LayoutParams.FLAG_SECURE);            }
            @Override
            public void onActivityStarted(Activity activity) {
            }
            @Override
            public void onActivityResumed(Activity activity) {

            }
            @Override
            public void onActivityPaused(Activity activity) {

            }
            @Override
            public void onActivityStopped(Activity activity) {
            }
            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) {
            }
            @Override
            public void onActivityDestroyed(Activity activity) {
            }
        });
    }
}