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

(안드로이드) 카메라 구동시 파일 저장이 잘 안됩니다.

0 추천

안녕하세요, 회원가입해서 질문하려고 했는데.. 질문 삭제가 안되고 아래처럼 됐네요 (__)

 

구글에서 카메라 찍는거 & 크랍하는거 예제보고 하고 있는데요.

크랍이나 카메라 구동엔 문제가 없는데 앨범에 카메라가 저장이 안됩니다..

이상한건 아예 안되는게 아니고 어쩌다가 되거나, 앱 재 실행에만 작동한다는거..

 

먼저 파일과 위치를 리턴하는 함수 하나를 만들고요,

 

    private File createImageFile() throws IOException {
        // Create an image file name
        String imageFileName = "tmp_" + String.valueOf(System.currentTimeMillis()) + ".jpg";

        //File storageDir = getExternalFilesDir(Environment.DIRECTORY_PICTURES);
        File storageDir = new File(Environment.getExternalStorageDirectory(), imageFileName);
        mCurrentPhotoPath = "file:" + storageDir.getAbsolutePath();
        return storageDir;
    }

 

그리고 사진찍기 버튼을 누르면 아래처럼!

 

private void dispatchTakePictureIntent() {
        Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
            File photoFile = null;
            try {
                photoFile = createImageFile(); // 사진찍은 후 저장할 임시 폴더
            } catch (IOException ex) {


            }


            if (photoFile != null) {
                photoURI = Uri.fromFile(photoFile); // 임시폴더의 위치,경로 가져옴
                takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI); 
                startActivityForResult(takePictureIntent, REQUEST_IMAGE_CAPTURE);
            }
        }
    }

 

실행하는 순서거든요, 그리고 Crop할거면 Crop함수로 넘기구요.

 

나머지는 어떤 버튼눌렀느냐 리턴값이 뭐냐에 따른건데,

 

그것과 상관없이 이상한건 몇개는 저장되다가 그 다음부턴 저장이 안돼요. 다시 앱 설치하면 한꺼번에 저장이 다 된걸로 나오더라구요..

무슨 문제가 있을까요..??

 

참 그리고.

Environment.getExternalStoragePublicDirectory

이것을 사용하면요, 외장메모리에 저장이 되는건가요?

만약 외장메모리가 없는 사람들을 위해서는 어디에 저장되도록 해야할지 궁금합니다.

 

감사합니다 :D

겸군님 (1,900 포인트) 님이 2016년 9월 12일 질문
겸군님님이 2016년 9월 12일 수정

1개의 답변

0 추천
 
채택된 답변
이미지가 저장이 안된다는 느낌을 받은게 어떤것을 보고 그런 느낌을 받은것인가요?

혹시 ContentResolver를 통한 Uri를 통하여 확인하는 것이라면 사진 촬영후 MediaScan 한 이후 시점에야 동기화가 되기 때문에 시점차로 보이지 않을 수가 있습니다. ContentObserver라는 것을 사용하시면 동기화 완료 시점을 알 수 있고 그 시점에 확인을 하시면 촬영한 사진을 확인 하실 수 있습니다.

그리고 안드로이드에서 getExternalStorageDirectory 개념은 물리적인 외장 sdcard를 말하는 것이 아닌 3rd party 앱에서 권한에 따라 접근 가능한 영역을 말하는 것입니다. 일반적으로 /storage/emulated/0 이후 경로를 말하고 질문하신 getExternalStoragePublicDirectory는 3rd party 앱들에게 공개된 public한 directory를 리턴해줍니다. 예를 들어 getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS) 를 하시면 /storage/emulated/0/Downloads 경로를 리턴해 주지요.
Development Guy (70,570 포인트) 님이 2016년 9월 12일 답변
겸군님님이 2016년 9월 12일 채택됨
답변감사합니다 :D

사진을 찍은 다음에 앨범에 들어가보면 저장이 되어있어야하는데, 저장이 안되어있더라구요, 그래서 다시 어플을 재설치해서 켜보면 기존에 찍었던 것들이 다 한꺼번에 앨범에 들어가 있고 그래서요 ㅜㅜ

동기화작업같은게 있는건지 해서.. ContentReserver를 통해 할 수 있는 방법도 있나보네요!
...