fileObserverを使用してAndroidアプリでスクリーンショットを検出しようとしていますが、期待通りにfileObserverがAndroid 6で動作しません。ここでFileObserverがAndroid 6で動作しません。
スクリーンショットを検知するスニペットです:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_screenshot_detection);
observer = new FileObserver(Environment.getExternalStorageDirectory() + File.separator + Environment.DIRECTORY_PICTURES
+ File.separator + "Screenshots" + File.separator, FileObserver.ALL_EVENTS) {
@Override
public void onEvent(int event, String path) {
if (event == FileObserver.CREATE) {
Log.i(TAG, "Screenshot detected @ " + path);
}
}
};
observer.startWatching();
}
私は(のonEventがトリガされることはありません)動作しないのと同じコードが4.4.4どこを実行しているNexus 5の上で動作することを確認Nexus 5のランニングに私はAPI 23+のランタイムパーミッションを考慮しましたが、6.0.1。
Android MのfileObserverにknown issueが表示されていますが、スクリーンショットを検出するためのより良い方法がありますか? contentObserverを試してみたところ、issuesもありました。
あなたが確認しているディレクトリにAndroidデバイスがスクリーンショットを保存する必要はなく、スクリーンショットを撮ったときにAndroidデバイスが 'FileObserver'を起動する必要はありません。 Android 5.0以降では、メディアプロジェクションAPIを使用してスクリーンショットを自分で撮ってください。 – CommonsWare
人が自分のアプリにいる間に撮影されたスクリーンショットがあるかどうかを検出し、アプリから情報を共有するように促したいと思います。 メディア保護APIはそれを検出する方法を提供していますか?スクリーンショットを作成することはできますが、メディア保護APIを使用してスクリーンショットトリガを検出することはできません。 – Rishi
「私たちはスクリーンショットを作成できますが、メディアプロテクションAPIを使用してスクリーンショットトリガーを検出することはできません」と正確です。おそらく 'FileObserver'は、プライバシーの理由から、スクリーンショットを無視するように調整されているのかもしれません。 – CommonsWare