【问题标题】:When to delete file shared with external apps by content provider何时删除内容提供商与外部应用程序共享的文件
【发布时间】:2013-04-09 08:42:30
【问题描述】:

在我的应用程序中,我允许用户使用内容提供程序与外部应用程序共享文件。我的文件已加密,因此在我可以共享其中一个文件之前,我需要对其进行解密并将其存储在应用程序内部存储中。之后我实现了自定义内容提供程序,它可以通过使用给定的 URL 指向文件并返回 ParcelFileDescriptor 实例。

出于安全问题,我想在外部应用程序使用文件或用户取消操作后从内部存储中删除文件。

编辑:我与之共享文件的外部应用程序是第 3 方应用程序。

所以我的问题是: 我应该什么时候删除文件,或者你知道我可以监听的任何事件或我可以附加到文件的处理程序吗?

感谢您的所有回复。

附带的问题是: 您是否知道我不必将文件存储在内部存储中,而是直接将其作为流发送到外部应用程序的方式?

【问题讨论】:

    标签: android security share android-contentprovider


    【解决方案1】:

    我的问题的答案是使用管道 ParcelFileDescriptor。

    CommonsWare 的 The Busy Coder's Guide to Android Development 中描述了代码。

    解决方案基于: https://github.com/nandeeshwar/Pfd-Create-Pipe

    我设法实施的实际解决方案是: https://github.com/commonsguy/cw-omnibus/tree/master/ContentProvider/Pipe

    【讨论】:

      【解决方案2】:

      如果它是您的外部应用程序,您可以留下一个加密文件并在 Intent 中传递密钥。如果是第 3 方外部应用程序,您必须找出该应用程序可以接受的内容。

      您还可以阅读有关服务的信息——也许它们提供您想要的。

      至于“何时”,我建议在 onResume() 中启动一个清理任务。 (除非您决定使用服务。)

      【讨论】:

      • 抱歉编辑了我的问题。所以外部应用程序是第 3 方应用程序。清理 onResume 的问题是,正如我所测试的,外部应用程序仅在操作完成时才要求文件。因此,例如在电子邮件应用程序中,当文件用作附件时,外部应用程序仅在发送电子邮件时才请求文件。
      猜你喜欢
      • 2023-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多