如何使用 SAF 更新服务器(文件云)上的文件?
How can I implement of updating file on the server (file cloud) using SAF?
我的移动云应用程序从远程服务器获取所有内容,它应该使用存储访问框架 http://developer.android.com/guide/topics/providers/document-provider.html and implement DocumentsProvider http://developer.android.com/reference/android/provider/DocumentsProvider.html 显示在支持 SAF 的应用程序列表中的第三方应用程序(如 Microsoft Office)中打开或保存。从 SAF 应用程序打开文件并在第三方应用程序(例如 Microsoft Office)中修改它后,该文件应该在服务器上被覆盖,但我在 SAF 框架中找不到相应的方法。
现在我看到了实现这个的唯一方法:
- 在
上的应用程序文件夹或 sdcard 中的临时位置下载文件
DocumentsProvider.openDocument()
- 设置该文件的文件观察者(FileObserver)
- 捕获 CLOSE_WRITE 事件并尝试将修改后的文件发送到服务器
- 如果出现任何网络错误或应用程序已重新启动 - 在应用程序数据库中存储有关此文件的信息,以便稍后发送此文件。
你能提供更简单的方法来达到预期的效果吗?或者,也许您在我的方法中发现了一些错误。类似的功能已经在 Dropbox 应用程序中实现。谢谢!
openDocument() returns a ParcelFileDescriptor and if you use the ParcelFileDescriptor.open(File, int, Handler, OnCloseListener), then you'll get a callback to the OnCloseListener's onClose() - 此时,您知道外部应用程序已完成文件处理,您可以开始同步操作。
// 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);
我的移动云应用程序从远程服务器获取所有内容,它应该使用存储访问框架 http://developer.android.com/guide/topics/providers/document-provider.html and implement DocumentsProvider http://developer.android.com/reference/android/provider/DocumentsProvider.html 显示在支持 SAF 的应用程序列表中的第三方应用程序(如 Microsoft Office)中打开或保存。从 SAF 应用程序打开文件并在第三方应用程序(例如 Microsoft Office)中修改它后,该文件应该在服务器上被覆盖,但我在 SAF 框架中找不到相应的方法。
现在我看到了实现这个的唯一方法:
- 在
上的应用程序文件夹或 sdcard 中的临时位置下载文件 DocumentsProvider.openDocument() - 设置该文件的文件观察者(FileObserver)
- 捕获 CLOSE_WRITE 事件并尝试将修改后的文件发送到服务器
- 如果出现任何网络错误或应用程序已重新启动 - 在应用程序数据库中存储有关此文件的信息,以便稍后发送此文件。
你能提供更简单的方法来达到预期的效果吗?或者,也许您在我的方法中发现了一些错误。类似的功能已经在 Dropbox 应用程序中实现。谢谢!
openDocument() returns a ParcelFileDescriptor and if you use the ParcelFileDescriptor.open(File, int, Handler, OnCloseListener), then you'll get a callback to the OnCloseListener's onClose() - 此时,您知道外部应用程序已完成文件处理,您可以开始同步操作。
// 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);