Как я могу реализовать обновление файла на сервере (файловое облако) с помощью SAF?
Мое мобильное облачное приложение получает весь контент с удаленного сервера, и оно должно использовать Storage Access Framework http://developer.android.com/guide/topics/providers/document-provider.html и реализовать DocumentsProvider http://developer.android.com/reference/android/provider/DocumentsProvider.html будет отображаться в сторонних приложениях (например, Microsoft Office) в списке приложений, которые поддерживают SAF при открытии или сохранении. После открытия файла из приложения SAF и его изменения в стороннем приложении (например, в Microsoft Office) этот файл должен быть переопределен на сервере, но я не могу найти соответствующий метод в структуре SAF для этого.
Теперь я вижу единственный способ реализовать это:
- Загрузите файл во временном месте в папке приложения или SDCard на
DocumentsProvider.openDocument() - Установить файл обозревателя (FileObserver) этого файла
- Перехватить событие CLOSE_WRITE и попытаться отправить этот измененный файл на сервер
- В случае каких-либо сетевых ошибок или если приложение было перезапущено - сохраните информацию об этом файле в базе данных приложения, чтобы отправить этот файл позже.
Можете ли вы предложить более простой способ достижения желаемого результата? Или, может быть, вы видите некоторые ошибки в моем подходе. Подобный функционал уже реализован в приложении dropbox. Спасибо!
1 ответ
openDocument() возвращает ParcelFileDescriptor, и если вы используете ParcelFileDescriptor.open (File, int, Handler, OnCloseListener), то вы получите обратный вызов OnClose() OnCloseListener - в этот момент вы знаете, что внешнее приложение имеет закончили с файлом, и вы можете начать операцию синхронизации.
// A file representing the local copy of the file
File file = ...;
return ParcelFileDescriptor.open(
file,
ParcelFileDescriptor.parseMode(mode),
new Handler(), // use the current thread
onCloseListener);