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

时间:2012-12-31 08:20:59

标签: android file android-intent

我有以下代码:

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"));

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

5 个答案:

答案 0 :(得分:1)

如果您的问题是如何知道何时删除文件,那么您无法知道答案。

我使用的方法是将文件保存在应用程序的缓存目录中(internalexternal)。因此,当设备运行不足时,Android会自动删除它。但是,作为一个好习惯,我首先删除共享新文件之前缓存中的所有现有文件。

要实际删除该文件,请参阅@ Sahil的回答

答案 1 :(得分:1)

首先请参阅@Dheeraj V.S.答案。

删除文件的方法

  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());
      }
    }
    

答案 2 :(得分:0)

在Intent之后,您可以使用以下代码从外部存储中删除文件

File file = new File(selectedFilePath);
boolean deleted = file.delete();

其中selectedFilePath是您要删除的文件的路径 - 例如:

  

/sdcard/YourCustomDirectory/ExampleFile.mp3

答案 3 :(得分:0)

当您根据活动生命周期打开e邮箱时,当您在活动中返回时,当前活动将继续onPause(),然后On Resume方法将调用,因此在您的on Resume方法上写下打击代码。这个技巧解决了我的问题

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();
}

答案 4 :(得分:0)

另一个可能的答案是在你的应用程序恢复时创建一个新线程,立即标记当前时间,让线程休眠多久,你觉得文件发送是合理的,当线程恢复时,只删除文件在之前标记的时间之前创建。这将使您能够仅删除应用程序恢复时存储位置中的内容,还可以为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 { }
});

} @Martijn Pieters这个答案是一个处理多个问题的不同解决方案。如果有的话,我发布的其他问题应该标记为重复,因为它们是同一个问题。我发布了每一个以确保有这个问题的人都可以找到解决方案。