마스터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로 넘어가질않네요 ...도와주세요 ~~

답변 달기

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