我有以下代码:
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"));
用户发送或共享文件后,如何删除它?
答案 0 :(得分:1)
如果您的问题是如何知道何时删除文件,那么您无法知道答案。
我使用的方法是将文件保存在应用程序的缓存目录中(internal或external)。因此,当设备运行不足时,Android会自动删除它。但是,作为一个好习惯,我首先删除共享新文件之前缓存中的所有现有文件。
要实际删除该文件,请参阅@ Sahil的回答
答案 1 :(得分:1)
首先请参阅@Dheeraj V.S.答案。
删除文件的方法
您可以使用在后台运行的服务删除这些文件。服务检查文件夹是否包含任何文件,然后在服务中写入逻辑,以便删除文件。
您可以在启动应用程序时删除这些文件。表示特定文件夹中是否存在任何文件,因此在启动欢迎活动时,您可以将逻辑删除文件。
//删除隐藏文件
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这个答案是一个处理多个问题的不同解决方案。如果有的话,我发布的其他问题应该标记为重复,因为它们是同一个问题。我发布了每一个以确保有这个问题的人都可以找到解决方案。