То, что я сделал, это следующее.
Я использовал:
myfile.deleteOnExit();
Однако, как указано в DR ниже в комментарии правильный ответ , это негарантировать удаление файла.Вот почему я также удаляю файл после возвращения Shared Activity.Я удаляю файл, если файл существует.Поскольку приложение иногда зависало, я помещаю его в try{}
, и оно работает.
Я не знаю, почему оно не работает для вас, но для меня это работает, по крайней мере, для вложений Gmail, TextSecure, Hangouts.
В классе delcaration:
static File file;
В методе, который вызывает намерение:
Intent share = new Intent(Intent.ACTION_SEND);
share.setType("image/png");
// Compress the bitmap to PNG
ByteArrayOutputStream bytes = new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 100, bytes);
// Temporarily store the image to Flash
File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/FolderName");
dir.mkdirs();
// This file is static.
file = new File(dir, "FileName.png");
try {
file.createNewFile();
FileOutputStream fo = new FileOutputStream(file);
fo.write(bytes.toByteArray());
fo.flush();
fo.close();
} catch (IOException e) {
e.printStackTrace();
}
// Share compressed image
share.putExtra(Intent.EXTRA_STREAM, Uri.parse("file:///"+file.getPath()));
/** START ACTIVITY **/
startActivityForResult(Intent.createChooser(share,"Share Image"),1);
// Delete Temporary file
file.deleteOnExit(); // sometimes works
В дополнительном методе:
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Because app crashes sometimes without the try->catch
try {
// if file exists in memory
if (file.exists()) {
file.delete();
}
} catch (Exception e) {
Log.d(LOG,"Some error happened?");
}
}