私は近年Android=にプログラムしていますが、ユーザーがスクリーンショットを撮ったときにそれを検出する方法は?ユーザーがスクリーンショットを撮ったときに、次のアクティビティに移動することを望んでいます。イベントをインターセプトする方法ですが、問題があります。たとえば、デバイスがスリープ状態になると、イベントがインターセプトされます。スクリーンショットのイベントのみをインターセプトするためのソリューションはありますか、それとも他のイベントを無視しますか?
ご協力ありがとうございました !
スクリーンショットが撮られたことを伝える直接的なブロードキャストインテントはありません。一部の人々 here (Snapchatで行われているように)そうするための可能なオプションについて議論します。可能なオプションの1つは、FileObserver
を使用することです。
スクリーンショットが撮られたときに通知を受けるための私のハックは次のとおりです。
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を使用することになりました。