【Android】アプリ画面のスクリーンショットを禁止する方法

当初は最近使用している家計簿アプリのご紹介を使用と思っていたのですが、アプリがスクリーンショットを撮影できない設定になっていることが判明しました。
そのため、急遽予定を変更しまして、今回はアプリのスクリーンショット操作を禁止する方法についてご紹介!
というか、あまりスクリーンショット自体を撮らないし、アプリにも組み込んだことがなかったので、そもそもそんな機能があったことを知りませんでした…。

ちなみに、その撮影禁止のアプリでスクリーンショットを撮影しようとしたところ、下記の画像のようなメッセージが通知エリアに表示されました。

初めてみましたが、こんなことができたんですね!

 

今回参考にさせていただいたサイトはこちらから。

[Android]アプリでスクリーンショットを無効にする|DevelopersIO
https://dev.classmethod.jp/smartphone/android/prevent-screenshot/

実装方法は案外シンプルで、Activity の場合は、下記のコードを追加します。

Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_SECURE);

Fragment で実装したい場合は、下記のように記述するとのこと。

WindowManager mWindowManager; 
FrameLayout mOverlapView;
WindowManager.LayoutParams mParams;
 
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mParams = new WindowManager.LayoutParams(
            WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
            WindowManager.LayoutParams.FLAG_SECURE,
            PixelFormat.TRANSLUCENT);
    mWindowManager = (WindowManager)getActivity().
        getApplicationContext().getSystemService(Context.WINDOW_SERVICE);
    mOverlapView = new FrameLayout(getActivity());
    mWindowManager.addView(mOverlapView, mParams);
}
@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (hidden) {
        mWindowManager.removeView(mOverlapView);
    } else {
        mWindowManager.addView(mOverlapView, mParams);
    }
}

なお、実際に無効化を操作しているのは、8行目からの mParams の記述になります。
そして、その操作を反映するために、onHiddenChanged() でその変更反映の処理を行っています。

Activity もしくは Fragment でのスクリーンショット禁止の記述は以上です。

 

以上、Androidアプリでスクリーンショット操作を禁止にする方法でした。
もし開発中のアプリでスクリーンショットを制御したい場合は、是非参考にしてください。

>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG