有没有办法使用 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,但这不适用于我的应用程序。因此,我只能让相机应用程序将其文件保存在它想要的位置,然后再移动它们。
其他一些应用程序只是制作照片副本并将副本存储在私人目录中。我可以这样做,但这会进一步加剧存储问题。长期的解决方案可能是将云存储与本地私有缓存结合使用。