我有以下代码:
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
删除文件的方法
-
您可以使用后台运行的服务删除这些文件。服务检查文件夹是否包含任何文件,然后在服务中写入逻辑,以便它将删除文件。
-
您可以在启动应用程序时删除这些文件。
意味着如果任何文件存在于特定的文件夹中,那么在开始欢迎活动时,您可以添加逻辑来删除文件。
//删除隐藏文件
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 { }
});
}这个答案是一个不同的解决方案,可以处理多个问题。如果有的话,我发布的其他问题应该被标记为重复,因为它们是相同的问题。