私のアプリケーションは、ギャラクシータブ用のSamsungアダプターを使用して外部SDカードに書き込みます。USBデバイスが「安全に削除」された場合、ファイルはすべて問題ありませんが、デバイスが安全に削除されなかった場合、新しく書き込まれたファイルはすべて0バイトになります。
コードの縮小版は次のとおりです。
String json = "{some data to export}";
String folderPath = Environment.getExternalStorageDirectory().toString() + File.separator + "Storages" + File.separator + "usb" + File.separator + "sda";
File outputFile = new File(folderPath, "export.txt");
FileWriter writer = new FileWriter(outputFile);
BufferedWriter out = new BufferedWriter(writer);
out.write(json);
out.flush();
out.close();
ご覧のとおり、ファイルをフラッシュして閉じていますが、USBがマウント解除される前に、Androidが実際にコンテンツをフラッシュすることを気にしていないように見えます。
明らかな解決策は、ユーザーに安全にマウントを解除するように指示することですが、ユーザーがどのようなものかは誰もが知っています。では、Androidにファイルの内容をプログラムでSDカードにフラッシュさせる方法はありますか?(BufferedWriter.flush / BufferedWriter.closeに加えて)
デバイスは、Android3.1を実行しているSamsungGalaxy Tab10.1GT-P7510です。