Как заменить FileObserver в Android 10? - PullRequest
0 голосов
/ 11 ноября 2019

android.os.FileObserver требует java.io.File для работы. Но с Android 10 Google ограничил доступ ко всему, кроме личного каталога ваших приложений, к известной «Storage Access Framework». В результате доступ к чему-либо через java.io.File прерывается и делает FileObserver бесполезным, если вы не собираетесь использовать его в личном каталоге своих приложений. Однако я хочу, чтобы меня заметили, когда что-то изменилось в определенном каталоге на внешнем хранилище. Я также хотел бы избегать периодической проверки изменений.

Я попытался использовать ContentResolver.registerContentObserver(uri,notifyForDescendants,observer) и столкнулся с некоторыми проблемами с этим методом:

  • Каждый Uri, который я подключил до сих порбыло принято
  • Это не дает сбоя и не замечает, если Uri не работает
  • Я не могу найти документацию, сообщающую, что Uri s действительно работает

Единственное, над чем я поработал, это следующий подход:

// works, but returns all changes to the external storage
contentResolver.registerContentObserver(MediaStore.Files.getContentUri("external"), true, contentObserver)

К сожалению, он включает в себя все внешнее хранилище и возвращает носители Uri s только в случае изменений. content://media/external/file/67226 например.

Есть ли способ узнать, указывает ли это Uri на мой каталог?

Или есть способ сделать registerContentObserver()работать с Uri таким образом, чтобы я получал уведомление всякий раз, когда что-то в папке изменилось?

У меня также не было успеха, пробуя различные Uris, связанные с DocumentsFile и внешним хранилищем Uri s.

...