如何使用SAF在服务器(文件云)上实现更新文件?

时间:2016-01-18 18:59:37

标签: android cloud saf

我的移动云应用程序从远程服务器获取所有内容,它应该使用存储访问框架http://developer.android.com/guide/topics/providers/document-provider.html并实现DocumentsProvider http://developer.android.com/reference/android/provider/DocumentsProvider.html以在列表中的第三方应用程序(如Microsoft Office)中显示在开放或保存时支持SAF的应用程序。从SAF应用程序打开文件并在第三方应用程序(例如Microsof Office)中修改它之后,应该在服务器上覆盖此文件,但是我在SAF框架中找不到相应的方法。

现在我看到实现这个的唯一方法:

  1. 在app文件夹或sdcard中的临时位置下载文件 DocumentsProvider.openDocument()
  2. 设置此文件的文件观察者(FileObserver)
  3. 捕获CLOSE_WRITE事件并尝试将此修改后的文件发送到服务器
  4. 如果出现任何网络错误或已重新启动应用程序 - 请在应用程序数据库中存储有关此文件的信息,以便稍后发送此文件。
  5. 您能提供更简单的方法来达到预期的效果吗?或许你在我的方法中看到一些错误。类似的功能已在Dropbox应用程序中实现。谢谢!

1 个答案:

答案 0 :(得分:1)

openDocument()返回ParcelFileDescriptor,如果您使用ParcelFileDescriptor.open(File, int, Handler, OnCloseListener),那么您将收到OnCloseListeneronClose()的回调 - 你知道外部应用程序已经完成了文件,你可以开始同步操作。

// 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);