SD カードに保存された画像を取得しようとすると、いくつかの問題が発生します。
基本的に、画像を撮影するときに使用しているコードは次のとおりです。
if(now==null){
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmm");
now = sdf.format(new Date());
}
myDirVids=new File(Environment.getExternalStorageDirectory()+"/TimelapseVideos");
if(!myDirVids.exists()){
myDirVids.mkdirs();
}
myDirPhotos=new File(Environment.getExternalStorageDirectory()+"/TimelapsePhotos");
if(!myDirPhotos.exists()){
myDirPhotos.mkdirs();
}
myDir=new File(myDirPhotos+"/timelapse"+now);
myDir.mkdirs();
DecimalFormat decimalFormat = new DecimalFormat("00000");
imagename = "Image-"+ decimalFormat.format(num) +".jpg";
file = new File (myDir, imagename);
if (file.exists ()) file.delete ();
try {
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
この行の直後に、保存された画像を取得しようとしましたが、利用できないように見えるため、NullPointerException が発生しています。
Log.d(TAG, file.getAbsolutePath());
Log.d(TAG, imagename);
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
最初の行で nullPointerException を取得し、Log.d(TAG, file.getAbsolutePath());
しかし、この行をスリープ後に配置すると、nullPointerException はスローされません。エラーが発生しないようにするには、スリープを 500 ミリ秒以上にする必要があります。
問題の原因はわかりませんが、FileOutPutStream 操作が終了しても、スマートフォンはまだデータを SD カードに保存していると思います。電話をしばらく(0.5〜1秒)放置すると、書き込みプロセスが終了したため、問題はなくなります。
私の質問は:
書き込み操作がいつ終了するかを知る方法はありますか?