StorageActionFramework ACTION_OPEN_DOCUMENT可以请求单个文件吗?

时间:2016-10-23 16:06:00

标签: android media removable-storage

有没有办法使用StorageActionFramework ACTION_OPEN_DOCUMENT意图来请求特定文件的信息?更具体地说,我有一个特定文件的URI,我从MediaStore获得。我想知道它是否具有写访问权限,如果是,则删除它。此外,我想在没有任何UI的情况下这样做(在这个特定的上下文中不需要)。

文档说明了如何使用intent.addCategory (Intent.CATEGORY_OPENABLE)为一类文件执行此操作。并将其限制为某种类型的文件,例如intent.setType ("image/*")。但我没有看到任何东西将其限制在特定文件中。

此外,我意识到,一旦从StorageActionFramework收到一组文件,您就可以查看单个文件的属性。

如果我可以使用ACTION_OPEN_DOCUMENT获取SAF的URI,那么我可以使用DocumentsContract.deleteDocument()删除它。

更多上下文

在我的情况下,用户已从我的应用程序中调用了相机应用程序并拍摄了一张或多张照片。然后,我的代码查询MediaStore以确定新图像的文件名。然后我希望将文件移动到特定于我的应用程序的目录。这适用于位于"内部"和"外部"存储,但不是可移动存储。

从长远来看,这个解决方案是不充分的,因为很明显它将用于永久存储(尽管存储大小正在增加的快节奏可以缓解这种情况)。但是我的应用程序确实需要控制通过应用程序获取的图像文件,因此,将它们留在可移动存储上可能会破坏应用程序。

另一个复杂因素是缺少用于拍摄多张照片并将其保存到指定位置的Android API。有一个用于拍摄单张照片的API,但这对我的应用程序不起作用。因此,我倾向于让相机应用程序将文件保存到所需的位置,然后再移动它们。

其他一些应用只需复制照片并将副本存储在私人目录中。我可以做到这一点,但这进一步加剧了存储问题。长期解决方案可能是将云存储与本地私有缓存结合使用。

1 个答案:

答案 0 :(得分:1)

  

有没有办法使用StorageActionFramework ACTION_OPEN_DOCUMENT意图来请求特定文件的信息?

没有。对于初学者来说,存储访问框架与文件几乎没有关系。

最适合整体结构的是,如果您可以提供起始Uri,则允许用户选择并打开附近的文档。这将是一个很好的功能,但不受支持。

  

文档说明了如何使用intent.addCategory(Intent.CATEGORY_OPENABLE)为一类文件执行此操作。

没有。 CATEGORY_OPENABLE表示您获得的Uri应使用openInputStream()openOutputStream()和相关方法,以及query() Uri应该能够返回OpenableColumns。它与文件没什么关系。

  

并将其限制为某种类型的文件,intent.setType(" image / *")

内容限制为特定的MIME类型(或通配符)。它与文件没什么关系。

  

我想知道它是否具有写访问权限,如果是,则将其删除

您可能具有写入权限,可通过openOutputStream()更改内容。我不知道你有办法删除基础内容。

  

此外,我希望在没有任何UI的情况下执行此操作

使用ACTION_OPEN_DOCUMENT的唯一原因是显示用户界面,以允许用户选择一段内容。

  

我的代码然后查询MediaStore以确定新图像的文件名

由于不需要相机应用更新MediaStore,因此这似乎不会特别可靠。

  

另一个复杂因素是缺少用于拍摄多张照片并将其保存到指定位置的Android API。有一个用于拍摄单张照片的API,但这对我的应用程序无效

由于不需要相机应用程序允许用户连续拍摄多张照片,这似乎不会特别可靠。