protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
Intent intent;
File toFile = null;
File fromFile = null;
FileInputStream inputStream = null;
FileOutputStream outputStream = null;
switch(requestCode){
case REQUEST_CODE_CAMERA:
if(resultCode == RESULT_CANCELED) return;
if(cropedImageUri != null){
File f = new File(cropedImageUri.getPath());
if(f.exists()){
f.delete();
}
}
Uri uriImages = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
int id = -1;
String[] IMAGE_PROJECTION = {
MediaStore.Images.ImageColumns.DATA,
MediaStore.Images.ImageColumns._ID
};
try{
Cursor cursorImages = getContentResolver().query(uriImages, IMAGE_PROJECTION, null, null, null);
if(cursorImages != null && cursorImages.moveToLast()){
fromFile = new File(cursorImages.getString(0));
id = cursorImages.getInt(1);
toast.makeText(getBaseContext(), cursorImages.getString(0), Toast.LENGTH_LONG).show();
toast.makeText(getBaseContext(), cursorImages.getString(1), Toast.LENGTH_LONG).show();
cursorImages.close();
}
}catch(Exception e){
e.printStackTrace();
}
toFile = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/" + System.currentTimeMillis() + ".jpg");
try{
inputStream = new FileInputStream(fromFile);
outputStream = new FileOutputStream(toFile);
FileChannel fcin = inputStream.getChannel();
FileChannel fcout = outputStream.getChannel();
long size = fcin.size();
fcin.transferTo(0, size, fcout);
fcout.close();
fcin.close();
outputStream.close();
inputStream.close();
}catch(FileNotFoundException e){
e.printStackTrace();
}catch(IOException e){
e.printStackTrace();
}
fromFile.delete();
getBaseContext().getContentResolver().delete(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, MediaStore.Images.ImageColumns._ID+"="+id, null);
cropedImageUri = Uri.fromFile(toFile);
intent = new Intent("com.android.camera.action.CROP");
intent.setDataAndType(cropedImageUri, "image/*");
intent.putExtra("scale", true);
intent.putExtra("output", cropedImageUri);
startActivityForResult(intent, REQUEST_CODE_CROP);
break; //case REQUEST_CODE_CAMERA: 끝남
case REQUEST_CODE_CROP:
if(resultCode == RESULT_OK)
{
ImageView imageView = (ImageView)findViewById(R.id.insertImage);
imageView.setImageURI(cropedImageUri);
}
break;
}
}
여기에 있는 카메라 연동 소스보고 따라해 봤는데요. 일단 에뮬레이터에서는 안 돌아가구요.
엘지폰에서는 카메라에서 찍은 화면이 잘 뜹니다. 하지만 베가폰이나 넥서스에서는 엉뚱한 이미지를 불러오는군요.
중간에 원본 삭제 코드가 있어서 사진이 몇개 날아갔습니다. ㅠㅠ
toFile은 제대로 저장되는 걸로 봐서는 이상이 없구요..
문제는 fromFile이 엉뚱한 이미지파일을 불러온다는 것에 있습니다.
제 추측은... 여기서는 MediaStore에서 가장 마지막으로 커서를 보내서 경로를 받아오는데
아무래도 여기에 다른 파일의 정보가 있는 것 같습니다. (순서가 랜덤으로 저장되나요? ㅎ)
cursorImages.getString(0)를 토스트해보니 엉뚱한 파일 경로가 들어가있네요...
그래도 카카오톡 같은 걸 보면 찍은 이미지를 제대로 불러오는 거로 봐서는 방법이 없는 건 아닌거 같은데
머리가 안 돌아가네요. 또 다른 방법은 없나요? 카메라에서 찍은 이미지 경로를 인텐트로 다이렉트로 넘겨주면 참 편할 텐데요...