【问题标题】:When to delete file shared with external apps by using Intent.ACTION_SEND in Android何时在 Android 中使用 Intent.ACTION_SEND 删除与外部应用共享的文件
【发布时间】:2023-03-10 21:17:01
【问题描述】:

在我的应用程序中,我允许用户使用 Intent.ACTION_SEND 与外部应用程序共享文件。我的文件已加密,因此在我可以共享其中一个文件之前,我需要对其进行解密并将其存储在应用程序内部存储中。之后我共享文件 Uri 以发送文件。出于安全问题,我想在外部应用程序使用文件或用户取消操作后从内部存储中删除文件

简介:在我的项目中,我解密选定的文件并保存到内部存储位置临时文件夹/目录。之后为该文件生成uris的arraylist并共享'usri's的arraylist。

这里的主要问题是在共享文件成功/失败后删除临时文件夹。

我使用下面的代码来共享文件

private void startShareIntent(ArrayList<Uri> uris) {
    Intent share = new Intent(Intent.ACTION_SEND_MULTIPLE);
    share.setType("audio/*");
    share.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
    startActivityForResult(Intent.createChooser(share, "Share audio File(s)"),SHARE_AUDIO_FILES_CODE);
}

用于获取 onActivity 结果

protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == RESULT_OK) {
        if(requestCode==SHARE_AUDIO_FILES_CODE)
        {
            //TODO delete decrypted files when success
         }
        }
    if(resultCode==RESULT_CANCELED)
    {
        //TODO delete decrypted files when failure.
    }
}

但这里总是 resultCode 只返回 RESULT_CANCELED。并在共享文件完成之前调用它。

【问题讨论】:

  • @Selvin 感谢您的回复。在我的项目中,我解密选定的文件并保存到内部存储位置临时文件夹/目录中。之后为该文件生成uris的arraylist并共享'usri's的arraylist。这里的主要问题是在共享文件成功/失败后删除临时文件夹。

标签: android android-intent share


【解决方案1】:

您可以在您的活动的onResume() 上从 SD 卡中删除该文件。因此,当用户从外部应用程序返回时,它将关闭,您的应用程序将从打开它的同一活动中恢复。

但我个人并不认为您的方法是解决安全问题的最佳方法。任何知识很少的人都可以在解密文件打开时复制它们。

【讨论】:

  • 感谢您的回复。这里 onResume() 在文件上传/共享时间之前调用。如果我在 onResume 中删除了解密文件,它将显示文件未找到异常。
  • 您必须为此设置一个条件,在这种情况下,您需要执行 onResume 本身的操作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-09-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多