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.