作为Intent.ACTION_SEND发送到邮件后删除文件



我有以下代码:

Uri screenshotUri = Uri.fromFile(file);
        Intent intent = new Intent(Intent.ACTION_SEND);
        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.putExtra(Intent.EXTRA_STREAM, screenshotUri);
        intent.putExtra(Intent.EXTRA_SUBJECT, "Location of " + name);
        intent.putExtra(Intent.EXTRA_TITLE, getText(R.string.screen_share_message));
        intent.putExtra(Intent.EXTRA_TEXT, getText(R.string.screen_share_message));
        intent.setType("image/*");
        startActivity(Intent.createChooser(intent, "Share with"));

用户发送或共享文件后,如何删除文件?

如果你的问题是你怎么知道何时删除文件,那么答案是你不知道。

我使用的方法是将文件保存在应用程序的缓存目录(内部或外部)中。所以当设备的存储空间不足时,它会被Android自动删除。但是,作为一种良好的做法,我在共享新文件之前首先删除缓存中的所有现有文件。

要真正删除文件,请参考@Sahil的回答

首先参考@Dheeraj v.s answer

删除文件的方法

  1. 您可以使用后台运行的服务删除这些文件。服务检查文件夹是否包含任何文件,然后在服务中写入逻辑,以便它将删除文件。

  2. 您可以在启动应用程序时删除这些文件。

  3. 意味着如果任何文件存在于特定的文件夹中,那么在开始欢迎活动时,您可以添加逻辑来删除文件。

//删除隐藏文件

try {
      new Helper().deleteFromExternalStorage(".photo.jpg");
}
catch(Exception e){
      Log.v("APP","Exception while deleting file");
}

从外部存储器中删除文件的方法

public void deleteFromExternalStorage(String fileName) {
  String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/directoryname";
  try
  {
    File file = new File(fullPath, fileName);
    if(file.exists())
        file.delete();
  }
  catch (Exception e)
  {
    Log.e("APP", "Exception while deleting file " + e.getMessage());
  }
}

当你根据活动生命周期打开电子邮箱时,你当前的活动在onPause()上移动,当你在活动中返回时,然后on Resume方法将调用,所以在on Resume方法上编写blow代码。这个把戏解决了我的问题。

protected void onResume() {
    // TODO Auto-generated method stub
    File file= new File(android.os.Environment.getExternalStorageDirectory().toString()+ "/akanksha" + ".png");
    if(file.exists())
    {
         file.delete();
    }
    super.onResume();
}

另一个可能的答案是,当你的应用程序恢复时创建一个新线程,立即标记当前时间,让线程休眠多长时间你觉得对文件发送来说是合理的,当线程恢复时,只删除在之前标记的时间之前创建的文件。这将使你能够只删除在应用程序恢复时存储位置中的内容,但也给gmail留出了时间来删除电子邮件。最后,它解决了您发送一组文件,然后发送第二组文件的情况,但是当您清理第一组文件时,在发送之前删除第二组文件,这保证了您只删除发送电子邮件时放在目录中的文件。代码片段:(我使用c#/Xamarin,但你应该明白)

public static void ClearTempFiles()
{
    Task.Run(() =>
    {
    try
    {
        DateTime threadStartTime = DateTime.UtcNow;
        await Task.Delay(TimeSpan.FromMinutes(DeletionDelayMinutes));
        DirectoryInfo tempFileDir = new DirectoryInfo(TempFilePath);
        FileInfo[] tempFiles = tempFileDir.GetFiles();
        foreach (FileInfo tempFile in tempFiles)
        {
            if (tempFile.CreationTimeUtc < threadStartTime)
            {
                File.Delete(tempFile.FullName);
            }
        }
    }
    catch { }
});

}这个答案是一个不同的解决方案,可以处理多个问题。如果有的话,我发布的其他问题应该被标记为重复,因为它们是相同的问题。

相关内容

  • 没有找到相关文章

最新更新