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

버튼이 반응이 없습니다.

0 추천

버튼을 눌러도 반응이 없습니다.

플래시, 셔터음, 사진저장 아무것도 안되네요...

문제가 뭘까요.

 

public class MyPreview extends AppCompatActivity {


    MyCameraSurface mSurface;

    Button mShutter;

    String mRootPath;


    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.fragment_0);

        mSurface = (MyCameraSurface) findViewById(R.id.previewFrame);

        mShutter = (Button)findViewById(R.id.button1);

        mShutter.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v){

                Camera.Parameters mCameraParameter;

                mCameraParameter = mSurface.mCamera.getParameters();

                mCameraParameter.setFlashMode("On");

                mSurface.mCamera.setParameters(mCameraParameter);

                mSurface.mCamera.takePicture(shutterCallback, null, mPicture);

            }});

    }


    PictureCallback mPicture = new PictureCallback() {

        public void onPictureTaken(byte[] data, Camera camera) {


            //날짜로 파일 이름 만들기

            Calendar calendar = Calendar.getInstance();

            String FileName = String.format("SH%02d%02d%02d-%02d%02d%02d.jpg",

                    calendar.get(Calendar.YEAR) % 100, calendar.get(Calendar.MONTH)+1,

                    calendar.get(Calendar.DAY_OF_MONTH), calendar.get(Calendar.HOUR_OF_DAY),

                    calendar.get(Calendar.MINUTE), calendar.get(Calendar.SECOND));

            String path = mRootPath + "/" + FileName;


            File file = new File(path);

            try {

                FileOutputStream fos = new FileOutputStream(file);

                fos.write(data);

                fos.flush();

                fos.close();

            } catch (Exception e) {

                return;

            }


            //파일을 갤러리에 저장

            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);

            Uri uri = Uri.parse("file://" + path);

            intent.setData(uri);

            sendBroadcast(intent);

            Toast.makeText(getApplicationContext(), "사진이 저장 되었습니다", Toast.LENGTH_SHORT).show();

            camera.startPreview();

        }

    };


    ShutterCallback shutterCallback = new ShutterCallback() {

        public void onShutter () {
        }
    };

}


class MyCameraSurface extends SurfaceView implements SurfaceHolder.Callback {

    SurfaceHolder mHolder;
    Camera mCamera;

    public MyCameraSurface(Context context, AttributeSet attrs) {

        super(context, attrs);
        mHolder = getHolder();
        mHolder.addCallback(this);
        mHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
    }


    // 표면 생성시 카메라 오픈하고 미리보기 설정

    public void surfaceCreated(SurfaceHolder holder) {

        mCamera = Camera.open();
        mCamera.setDisplayOrientation(90);

        try {
            mCamera.setPreviewDisplay(mHolder);
        } catch (IOException e) {
            mCamera.release();
            mCamera = null;

        }

    }

    // 표면 파괴시 카메라도 파괴한다.

    public void surfaceDestroyed(SurfaceHolder holder) {

        if (mCamera != null) {
            mCamera.stopPreview();
            mCamera.release();
            mCamera = null;
        }

    }
    // 표면의 크기가 결정될 때 최적의 미리보기 크기를 구해 설정한다.

    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {

        Camera.Parameters params = mCamera.getParameters();
        params.setPreviewSize(width, height);
        params.setPictureSize(width, height);
        params.setRotation(90);
        mCamera.setParameters(params);
        mCamera.startPreview();

    }


}
ThisIsTheTime (220 포인트) 님이 2015년 9월 30일 질문
ThisIsTheTime님이 2015년 9월 30일 reshown

1개의 답변

0 추천
일단 버튼이 진짜 반응을 안하는지 알아보세요.
터치할때 외관 변화가 있는지, 그리고 onClick 콜백이 실제로 불리는지 로그 찍어보시구요.
Jinthree (8,980 포인트) 님이 2015년 10월 1일 답변
...