Ich habe eine Anwendung, die ein öffentliches Verzeichnis auf externen Speicher FileObserver
beobachtet. Es funktioniert gut auf Lollipop
Geräte. Ich möchte Unterstützung für Marshmallow
hinzufügen, also habe ich ein Nexus 9 Tablet damit eingerichtet.FileObserver nicht in Android 6.0 Eibisch (API 23) auf externen Speicher arbeiten
Auf dem Marshmallow-Gerät schlägt es fehl, auf Lollipop-Gerät ist es in Ordnung. Auf Marshmallow-Gerät reagiert die FileObserver
nicht auf Dateisystemereignisse, die von anderen Prozessen verursacht werden. Z.B. einen Screenshot erstellen, Dateien über adb
Shell erstellen. Es funktioniert gut, wenn die Dateien von meiner App erstellt werden.
Auf Marshmallow
, ich frage für WRITE_EXTERNAL_STORAGE
und READ_EXTERNAL_STORAGE
Berechtigungen von Manifest.xml
.
Wenn ich kompilieren mit API 23, mache ich auch sicher, dass ich ActivityCompat.requestPermissions()
nennen.
Wenn ich mit API kompilieren 22, verlasse ich mich nur auf Manifest.xml
.
Es funktioniert, wenn ich Sachen auf /data/data/my-package-name
beobachten.
Es schlägt fehl, wenn ich Sachen auf /storage/emulated/0/Pictures/Screenshots
beobachten.
Hat jemand Test FileObserver
allen folgenden considreing? :
Marshmallow
Gerät- API 23 und API 22?
- externer Speicher
- Dateien, die von einem anderen Prozess als der beobachtenden App erstellt wurden (z. B.
adb
oder Screenshot erstellen).
Haben Sie andere Speicherorte auf externem Speicher ausprobiert? Es ist möglich, dass Ihr Problem aufgrund seiner Empfindlichkeit auf dieses Verzeichnis beschränkt ist. Übrigens, was Sie kompilieren, hat nichts mit dem Verhalten Ihrer App in Bezug auf Laufzeitberechtigungen zu tun; Ihre 'targetSdkVersion' funktioniert. – CommonsWare
Achten Sie darauf, irgendwo einen Verweis auf den FileObserver zu behalten. Wenn es Müll gesammelt wird, wird es keine Ereignisse mehr empfangen. –
Auch, FWIW, [es gibt ein Problem darüber] (https://code.google.com/p/android-developer-preview/issues/detail?id=3099). – CommonsWare