0

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

例如,文档说明了如何使用intent.addCategory (Intent.CATEGORY_OPENABLE). 并将其限制为某种类型的文件,intent.setType ("image/*")例如。但我没有看到任何将其限制为特定文件的内容。

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

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

更多背景

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

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

另一个复杂的因素是缺乏用于拍摄多张照片并将它们保存到指定位置的 Android API。有这样一个用于拍摄单张照片的 API,但这不适用于我的应用程序。因此,我只能让相机应用程序将其文件保存在它想要的位置,然后再移动它们。

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

4

1 回答 1

1

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

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

最适合整体结构的事情是,如果您可以提供一个 start Uri,以允许用户选择并打开该文件附近的文档。这将是一个不错的功能,但不受支持。

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

否。CATEGORY_OPENABLE意味着Uri您返回的 应该使用openInputStream()openOutputStream()和相关方法,并且 aquery()上的Uri应该能够返回OpenableColumns. 它与文件关系不大。

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

这将内容限制为特定的 MIME 类型(或通配符)。它与文件关系不大。


我想知道它是否有写权限,如果有,删除它

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

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

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


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

由于相机应用程序不需要更新MediaStore,这似乎不是特别可靠。

另一个复杂的因素是缺乏用于拍摄多张照片并将它们保存到指定位置的 Android API。有这样一个用于拍摄单张照片的 API,但不适用于我的应用程序

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

于 2016-10-23T16:19:09.787 回答