ファイルの削除後の共有を意図
-
25-09-2019 - |
質問
ようにしている削除する一時ファイルは共有した後でandroidの意図するだけでも構いません。ACTION_SEND特徴です。現在の私の活動の結果、OnActivityResultんを削除するファイルです。残念ながらここだけていただく場合のデバッグでブレークポイントを設定してしまっているんですけどいいで自由に走というと、メールのファイル、メールがないたします。
と思い何が起きているのは、私の活動はファイルを削除する前にいってメールで送信.何がったり下がったりよくわからないのはなぜなのか、なonActivityResultみ後に呼ばれるその他の活動が終了?
もしファイルを削除するにonResumeができます。
あると良い。
解決 4
私は仕事にそれを得るために管理しています
File tbd = new File(sharePath);
tbd.deleteOnExit();
これはファイルを削除するようだ時に活動が閉じます。
他のヒント
気付いたのと同じ動作と同様です。を見ながらlogcatに誤りが目にしたgmailを訴えることで意見は、別紙をご参照ください。-であり、この趣旨を返す前のgmailメールが実際に読み込まれたファイルの取り付けます。
I havent頂いており周りの液だれが今のようなもの:
- ファイルを移動します一部のディレクトリでんでんを送ることを決定した
- そのまま送信し別添の通ACTION_SEND
- 次onResume私のスタート画面の活動、ファイルの削除、送信されたディレクトリ以上経過した時間フレームが合理的に十分な長のための送信を実際に行うことを目的として活動してい
るものを選択時間フレームがトリッキーではあるんじゃないでしょうか、gmail)での設定(またはその他のACTION_SEND提供者のほうファイルの読み込みまではネットワーク接続します。私は考えて24時間は妥当でなければならな私の場合は取り扱って診断履歴な実害に削除するものだく場合、ユーザがされていネットワークのための長期ます。
該当するコンテンツのファイルはテキストではないobscenely大の簡単なアプローチの内容を読み込むファイルを使用意図するだけでも構いません。putExtra(android.ます。意図するだけでも構いません。EXTRA_TEXT,yourText)のインラインでの身体にすることができます。
私がやったことは次の通りである。
私が使用します:
myfile.deleteOnExit();
しかし、D.R. の正解の下のコメントで述べたように、これはファイル削除を保証するものではありません。私も共有活動復帰した後のファイルを削除しています理由です。ファイルが存在する場合、私は、ファイルを削除します。アプリが時々クラッシュしたので、私はtry{}
の内側にそれを入れて、それが動作します。
それはあなたのために仕事をしない理由、私は知らないが、私にとって、それはGmailの添付ファイル、TextSecure、ハングアウトのために少なくともで働いています。
クラスdelcarationでの の
static File file;
の方法でそのcalles意図:の
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?");
}
}
別の潜在的な答えは、睡眠、すぐに現在の時刻をマークし、あなたのアプリが再開すると、新しいスレッドを作成することですファイルを送信するためにあなたが感じるしかし長いためスレッドが合理的である、とスレッドが再開したときに、唯一のファイルの削除以前にマークされた時間の前に作成しました。これは、あなただけのアプリが再開された時点での保管場所にあったものを削除する機能を提供するだけでなく、電子メールを出すために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ピータースこの答えはハンドル、複数の質問、異なるソリューションです。どちらかといえば、彼らは同じ質問であるため、他の質問は、私が上に掲載することを、重複としてマークする必要があります。私はこの問題を持っている人は誰でも、解決策を見つけることができることを保証するためにそれらのそれぞれに掲示ます。