2

我有以下代码:

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

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

4

5 回答 5

1

首先参考@Dheeraj VS 答案。

删除文件的方法

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

  2. 您可以在启动应用程序时删除这些文件。表示特定文件夹中是否存在任何文件,因此在开始欢迎活动时,您可以使用逻辑删除文件。

//删除隐藏文件

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());
  }
}
于 2012-12-31T08:49:27.793 回答
1

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

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

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

于 2012-12-31T08:41:15.373 回答
0

当您根据活动生命周期打开电子邮箱时,当您返回活动时,您当前的活动会继续 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();
}
于 2013-08-12T08:36:01.380 回答
0

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

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

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

/sdcard/YourCustomDirectory/ExampleFile.mp3

于 2012-12-31T08:35:15.137 回答
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 这个答案是一个不同的解决方案,可以处理多个问题。如果有的话,我发布的其他问题应该被标记为重复,因为它们是同一个问题。我在他们每个人上都张贴了以确保遇到此问题的任何人都可以找到解决方案。

于 2015-06-26T17:07:54.047 回答