web-dev-qa-db-ja.com

スクリーンショットを検出Android

私は近年Android=にプログラムしていますが、ユーザーがスクリーンショットを撮ったときにそれを検出する方法は?ユーザーがスクリーンショットを撮ったときに、次のアクティビティに移動することを望んでいます。イベントをインターセプトする方法ですが、問題があります。たとえば、デバイスがスリープ状態になると、イベントがインターセプトされます。スクリーンショットのイベントのみをインターセプトするためのソリューションはありますか、それとも他のイベントを無視しますか?

ご協力ありがとうございました !

13
Nachding

スクリーンショットが撮られたことを伝える直接的なブロードキャストインテントはありません。一部の人々 here (Snapchatで行われているように)そうするための可能なオプションについて議論します。可能なオプションの1つは、FileObserverを使用することです。

17
EscapeArtist

スクリーンショットが撮られたときに通知を受けるための私のハックは次のとおりです。

public void detectScreenShotService(final Activity activity){

   final Handler h = new Handler();
   final int delay = 3000; //milliseconds
   final ActivityManager am=(ActivityManager)activity.getSystemService(Context.ACTIVITY_SERVICE);

    h.postDelayed(new Runnable(){
        public void run(){

            List<ActivityManager.RunningServiceInfo> rs=am.getRunningServices(200);

            for(ActivityManager.RunningServiceInfo ar:rs){
                if(ar.process.equals("com.Android.systemui:screenshot")){
                    Toast.makeText(activity,"Screenshot captured!!",Toast.LENGTH_LONG).show();
                }
            }
            h.postDelayed(this, delay);
        }
    }, delay);

}

Oneplus 2とMoto Eでテスト済み。

更新:

これは最終的に私にとってはうまくいかず、結局スクリーンショットタイプのエントリでContentObserverを使用することになりました。

10
Udit Shah