마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

이미지 크롭 이후 startactivityforresult 에서 onactivityresult로 넘어가질 안하요..도와주세요

0 추천
public class CameraActivity extends Activity {
	private Preview mPreview;
	private Boxdraw mdraw;
	static int height;
	static int width;
	static float Left;
	static float Right;

	static float Top;
	static float Bottom;
	static Camera mCamera;
	private Uri mImageCaptureUri;
	static Paint paint = new Paint();
	static String fileName;
	
	public static Intent i;


	public static String path;
	private MediaScannerConnection mediaScannerConnection; // 미디어 스캔을 하기위해 미디어스캔
															// 연결
	private Bitmap bitmap;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
				WindowManager.LayoutParams.FLAG_FULLSCREEN);
		super.onCreate(savedInstanceState);

		DisplayMetrics displayMetrics = new DisplayMetrics();
		getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
		mediaScannerConnection = new MediaScannerConnection(getBaseContext(),
				new MediaScannerConnectionClient() {

					@Override
					public void onScanCompleted(String arg0, Uri arg1) {
						// TODO Auto-generated method stub
						Log.d("null", getExternalFilesDir(null)
								.getAbsoluteFile() + "/" + fileName + ".jpg");
				
   					androidCrop(arg1);
						mediaScannerConnection.disconnect();
						
					}

					@Override
					public void onMediaScannerConnected() {
						// TODO Auto-generated method stub
						mediaScannerConnection.scanFile(
								getExternalFilesDir(null).getAbsoluteFile()
										+ "/" + fileName + ".jpg", null);
					}
				});
	
		setContentView(R.layout.camera_shootingbtn); //카메라의 버튼을 그려주기위한 레이아웃 받아오기
		RelativeLayout rl = (RelativeLayout) findViewById(R.id.carem_shooting_btn_RL);

		mPreview = new Preview(this); 
		rl.addView(mPreview); // 레이아웃을 프리드뷰에 추가한다.

		Button shootingbtn = new Button(this);
		Button scannerbtn = new Button(this);
		shootingbtn.setText(" 촬영 ");
		scannerbtn.setText("스캐너");
		RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
		RelativeLayout.LayoutParams params2 = new RelativeLayout.LayoutParams(
				LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);


		params2.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
		scannerbtn.setLayoutParams(params2);
	
		params2.addRule(RelativeLayout.CENTER_VERTICAL);
		scannerbtn.setLayoutParams(params2);
		params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
		shootingbtn.setLayoutParams(params);
		params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
		shootingbtn.setLayoutParams(params);
		rl.addView(scannerbtn);
		rl.addView(shootingbtn);

		shootingbtn.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// TODO Auto-generated method stub

				CameraActivity.mCamera
						.takePicture(null, null, mPictureCallback);
				

			}
		});

		mdraw = new Boxdraw(this);
		addContentView(mdraw, new LayoutParams(LayoutParams.WRAP_CONTENT,
				LayoutParams.WRAP_CONTENT));

	}

	public void androidCrop(Uri arg1){
		
		i = new Intent("com.android.camera.action.CROP");
		i.setDataAndType(arg1, "image/*");
		i.putExtra("outputX", 200); // crop한 이미지의 x축 크기
		i.putExtra("outputY", 200); // crop한 이미지의 y축 크기
		i.putExtra("aspectX", 2); // crop 박스의 x축 비율
		i.putExtra("aspectY", 1); // crop 박스의 y축 비율
		i.putExtra("scale", true);
		i.putExtra("return-data", true);
		startActivityForResult(i, 1);
		Log.d(null, "던졌다");
	}
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		// TODO Auto-generated method stub
		super.onActivityResult(requestCode, resultCode, data);
		if(resultCode != RESULT_OK){
			return;
		}
		switch (requestCode) {
		case 1:
		{
			Log.d(null, "받았다");
			final Bundle extras = data.getExtras();
			path = getExternalFilesDir(null).getAbsoluteFile()+"/"+fileName+".jpg";
			
			if(extras!=null){
				Bitmap photo = extras.getParcelable("data");
				storeCropImage(photo, path);
				
			}
		}
		break;
		}
	}

	private void storeCropImage(Bitmap bitmap, String path) {
		File copyFile = new File(path);
		BufferedOutputStream out = null;

		try {
			copyFile.createNewFile();
			out = new BufferedOutputStream(new FileOutputStream(copyFile));
			bitmap.compress(CompressFormat.JPEG, 100, out);
			out.flush();
			out.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	@Override
	protected void onPause() {
		// TODO Auto-generated method stub
		finish();
		// startActivity(new Intent(this, MyTabViewActivity.class));
		super.onPause();
	}

	PictureCallback mPictureCallback = new PictureCallback() {

		@Override
		public void onPictureTaken(byte[] arg0, Camera arg1) {
			// TODO Auto-generated method stub
			File sdpath = getExternalFilesDir(null); // 경로 지정
			fileName = realtime(); // 파일 이름정해줄 변수
			File file = new File(sdpath.getAbsoluteFile() + "/" + fileName
					+ ".jpg");

			FileOutputStream out;
			try {
				out = new FileOutputStream(file);
				out.write(arg0);
				out.flush();
				if (!mediaScannerConnection.isConnected()) { // 미디어 스캔 연결되지않으면
					mediaScannerConnection.connect(); // 미디어 스캔을 연결한다.
					Log.d("aa", "연결됨");
				}
				out.close();
			} catch (IOException e) {
				// TODO: handle exception
				Toast.makeText(CameraActivity.this, "왜 저장이 안될가?", Toast.LENGTH_SHORT)
						.show();
			}
			CameraActivity.mCamera.startPreview();
		}

	};

	private String realtime() { // 현재 날짜 시간 분 초 받아와서 변수에넣음

		SimpleDateFormat mSimpleDateFormat = new SimpleDateFormat(
				"yyyy.MM.dd HH:mm:ss", Locale.KOREA);
		Date currentTime = new Date();
		String mTime = mSimpleDateFormat.format(currentTime);

		return mTime;

	}
	// private Uri createSaveCropFile(){
	// Uri uri;
	// String url = "tmp_"+String.valueOf(System.currentTimeMillis())+".jpg";
	// uri = Uri.fromFile(new
	// File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM),
	// url));
	// return uri;
	// }

}

class Preview extends SurfaceView implements SurfaceHolder.Callback {
	SurfaceHolder mHolder;

	Preview(Context context) {
		super(context);

		// SurfaceHolder.Callback을 설정함으로써 Surface가 생성/소멸되었음을
		// 알 수 있습니다.
		mHolder = getHolder();
		mHolder.addCallback(this);
		mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
	}

	public void surfaceCreated(SurfaceHolder holder) {
		// Surface가 생성되었다면, 카메라의 인스턴스를 받아온 후 카메라의
		// Preview 를 표시할 위치를 설정합니다.

		CameraActivity.mCamera = Camera.open();
		try {
			CameraActivity.mCamera.setPreviewDisplay(holder);
		} catch (IOException exception) {
			CameraActivity.mCamera.release();
			CameraActivity.mCamera = null;
			// TODO: add more exception handling logic here
		}
	}

	public void surfaceDestroyed(SurfaceHolder holder) {
		// 다른 화면으로 돌아가면, Surface가 소멸됩니다. 따라서 카메라의 Preview도
		// 중지해야 합니다. 카메라는 공유할 수 있는 자원이 아니기에, 사용하지 않을
		// 경우 -액티비티가 일시정지 상태가 된 경우 등 - 자원을 반환해야합니다.
		CameraActivity.mCamera.stopPreview();
		CameraActivity.mCamera.release();
		CameraActivity.mCamera = null;
	}

	public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) {
		Camera.Parameters parameters = CameraActivity.mCamera.getParameters();
		parameters.setPreviewSize(CameraActivity.width, CameraActivity.height);

		CameraActivity.mCamera.setParameters(parameters);
		CameraActivity.mCamera.startPreview();
	}

	public Camera.AutoFocusCallback cameraAutoCallback = new AutoFocusCallback() {

		@Override
		public void onAutoFocus(boolean success, Camera camera) {
			// TODO Auto-generated method stub
			if (true == success) { // 포커스가 성공 했을경우
				CameraActivity.paint.setColor(Color.rgb(47, 237, 40));
				Log.d("success", "" + success);
			} else { // 포커스가 실패할경우
				Log.d("success", "" + success);
			}
		}
	};

	public boolean onTouchEvent(android.view.MotionEvent event) { // 터치 리스너 터치시
																	// 이벤트 발생
		CameraActivity.mCamera.autoFocus(cameraAutoCallback); // 터치가되면 오토 포커스 작동
		return true;

	};
}


}

 

 

codeissay (270 포인트) 님이 2014년 12월 12일 질문
미디어스캐너커넥션 부분에서 스캐너 컴플릿트 메소드 안에서 크롭 메소드를 사용합니다. androidCrop 메소드가 실행되고 메소드 안에 안드로이드에서 제동하는 크롭 을 인텐트로 받아서 사용하여 startactivicyforresult 에서 onactivityresult로 넘어가질않네요 ...도와주세요 ~~

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...