当初は最近使用している家計簿アプリのご紹介を使用と思っていたのですが、アプリがスクリーンショットを撮影できない設定になっていることが判明しました。
そのため、急遽予定を変更しまして、今回はアプリのスクリーンショット操作を禁止する方法についてご紹介!
というか、あまりスクリーンショット自体を撮らないし、アプリにも組み込んだことがなかったので、そもそもそんな機能があったことを知りませんでした…。
ちなみに、その撮影禁止のアプリでスクリーンショットを撮影しようとしたところ、下記の画像のようなメッセージが通知エリアに表示されました。
初めてみましたが、こんなことができたんですね!
今回参考にさせていただいたサイトはこちらから。
[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アプリでスクリーンショット操作を禁止にする方法でした。
もし開発中のアプリでスクリーンショットを制御したい場合は、是非参考にしてください。