SAF (ストレージ アクセス フレームワーク) を使用してファイルを SD カードに書き込みます。Marshmallow では、ファイルが実際に書き込まれ、大幅な遅延 (約 10 秒) で更新されます。
私が使用する場合:
android.support.v4.provider.DocumentFile docFile = DocumentFile.fromTreeUri(context, getUri()) // tree uri that represents some existing file on sd card
File file = getFile(getUri()); // java.io.File that points to same file as docFile
docFile.length(); // length of current file is e.g. 150B
file.length(); // length of file is also 150B
try (OutputStream outStream = context.getContentResolver().getOutputStream(docFile.getUri()))
{
outStream.write(data, 0, 50); // overwrite with 50 B
outStream.flush(); // didn't help
}
docFile.length(); // it still returns 150B !!
file.length(); // it still returns 150B
Thread.sleep(12000); // sleep 12 seconds
docFile.length(); // now it returns correctly 50B
file.length(); // now it returns correctly 50B
ところで。File.length()
メソッドで長さを確認すると、同じ値が返されます。
すぐに書く方法はありますか?または、リスナーを設定できますか?それ以外の場合は、サイズを定期的に確認する必要があり、このようにしたくありません。実際、ファイルが書き込まれてから 10 秒も待ちたくありません。