在我的应用程序中,我允许用户使用内容提供商与外部应用程序共享文件。我的文件是加密的,所以在我可以共享其中一个文件之前,我需要解密它并将其存储在应用程序内部存储中。之后,我实现了自定义内容提供程序,它可以使用给定的URL指向该文件并返回ParcelFileDescriptor实例。
对于安全问题,我想在外部应用程序使用它或用户取消操作后从内部存储中删除该文件。
编辑:我与之共享文件的外部应用程序是第三方应用程序。
所以我的问题是: 我应该何时删除该文件,或者您知道我可以收听的任何事件或我可以附加到该文件的处理程序吗?
感谢您的回复。
附带问题是: 您是否知道我不必将文件存储在内部存储中,而是将其作为流直接发送到外部应用程序?
答案 0 :(得分:1)
我的问题的答案是使用管道ParcelFileDescriptor。
代码在CommonsWare的“繁忙编码器Android开发指南”中有所描述。
解决方案基于: https://github.com/nandeeshwar/Pfd-Create-Pipe
我设法实现的实际解决方案是: https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/Pipe
答案 1 :(得分:0)
如果它是您的外部应用程序,您可以保留加密文件并在Intent中传递密钥。如果它是第三方外部应用程序,您必须找出该应用程序可以接受的内容。
您可能还会阅读有关服务的信息 - 也许它们可以提供您想要的服务。
关于“何时”,我建议在onResume()中启动一个清理任务。 (除非您决定使用某项服务。)