web-dev-qa-db-ja.com

FileObserverはAndroid 6.0 Marshmallow(API 23)の外部ストレージでは機能しません

FileObserverを使用して外部ストレージ上のパブリックディレクトリを監視するアプリがあります。 Lollipopデバイスで正常に動作します。 Marshmallowのサポートを追加したいので、それを使用してNexus9タブレットをセットアップしました。

マシュマロデバイスでは失敗しますが、ロリポップデバイスでは問題ありません。マシュマロデバイスでは、FileObserverは他のプロセスによって引き起こされたファイルシステムイベントに反応しません。例えば。スクリーンショットを撮り、adbシェルを介してファイルを作成します。ファイルが私のアプリによって作成されている場合は正常に動作します。

Marshmallowで、_WRITE_EXTERNAL_STORAGE_と_READ_EXTERNAL_STORAGE_の権限を_Manifest.xml_に要求します。

API 23でコンパイルするときは、必ずActivityCompat.requestPermissions()を呼び出すようにします。

API 22でコンパイルするときは、_Manifest.xml_だけに依存します。

_/data/data/my-package-name_で何かを観察すると機能します。

_/storage/emulated/0/Pictures/Screenshots_で何かを観察すると、失敗します。

次のすべてを考慮してFileObserverをテストした人はいますか? :

  • Marshmallowデバイス
  • API23とAPI22?
  • 外部記憶装置
  • 監視アプリ以外のプロセスで作成されたファイル(例:adbまたはスクリーンショットの撮影)。
31
feher-melos

これはマシュマロのバグのようです このリンクを参照

これはNougatでも修正されていません。ほとんどのデバイスで機能しないという事実がまったく役に立たないため、このFileObserver全体でAPIを取り除くことができます。

1
Divy Soni