カメラ機能をベースにしたAndroidアプリを開発しています。プログラムに問題があり、それを理解できません。MymCurrentImagePath
は初期化されているため、常に null です。logcat は、takepicture()
関数にヒットしないことを示しているため、値が与えられることはありません。カメラが画像をうまく保存するまでビットマップへの後の操作を待つことができるように、スレッドをスリープさせようとしましたが、まだ機能していません。しかし、撮った写真を読まなくても、アプリケーションは完璧に動作し、写真をうまく保存できます。メタデータを直接操作するためにも使用しようとしbitmapfactory.decodebyte()
ましたが、これも失敗しました。誰が私が間違っていた部分について何か考えを教えてくれますか? それは本当に役に立ちます。どうもありがとうございました!!!
private static final String IMAGE_DIRECTORY ="sdcard/DCIM/Camera";
public static String mCurrentImagePath = null;
private CameraView cv;
private Camera mCamera = null;
public Camera.PictureCallback pictureCallback = new Camera.PictureCallback() {
public void onPictureTaken(byte[] data, Camera camera) {
try{
isFinish = false;
long timeTaken = System.currentTimeMillis();
mCurrentImagePath = IMAGE_DIRECTORY + "/"+ createName(timeTaken) + ".jpg";
File file = new File(mCurrentImagePath);
Log.d("path", "mCurrentImagePath_takepicture = " + mCurrentImagePath);
FileOutputStream fos = new FileOutputStream(file);
fos.write(data);
fos.flush();
fos.close();
Toast.makeText(OpenASURF.this, "saving the picture", Toast.LENGTH_SHORT).show();
isFinish = true;
}
catch(IOException e) {
e.printStackTrace();
}
mCamera.startPreview();
// TODO Auto-generated method stub
}
};
cv.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
if(mCamera != null) {
mCamera.takePicture(null, null, pictureCallback);
// let the system wait until finish taking the pictures.
//while(isFinish == false) {
try {
Thread.sleep(20000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//}
Log.d("path", "mCurrentImagePath_over1 = " + mCurrentImagePath);
Bitmap bmp = null;
bmp = BitmapFactory.decodeFile(mCurrentImagePath);
Log.d("path", "mCurrentImagePath_over2 = " + mCurrentImagePath);
}