Как я могу реализовать обновление файла на сервере (файловое облако) с помощью 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 для этого.

Теперь я вижу единственный способ реализовать это:

  1. Загрузите файл во временном месте в папке приложения или SDCard на
    DocumentsProvider.openDocument()
  2. Установить файл обозревателя (FileObserver) этого файла
  3. Перехватить событие CLOSE_WRITE и попытаться отправить этот измененный файл на сервер
  4. В случае каких-либо сетевых ошибок или если приложение было перезапущено - сохраните информацию об этом файле в базе данных приложения, чтобы отправить этот файл позже.

Можете ли вы предложить более простой способ достижения желаемого результата? Или, может быть, вы видите некоторые ошибки в моем подходе. Подобный функционал уже реализован в приложении 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);
Другие вопросы по тегам