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

안드로이드 내부저장소 캡쳐 저장

0 추천

SDCARD말고 내부저장소의 갤러리에 캡쳐한 사진을 저장하고 싶습니다..

 

누르면 토스트 메세지로 폴더생성과 저장됬다는 건 뜨는데

갤러리와 핸드폰 내부파일 그 어디에서도 캡쳐한 사진을 찾을 수 없습니다 ㅠㅠ

퍼미션 추가 당연히 해주었구요 (WRITE_EXTERNAL_STORAGE, READ_EXTERNAL_STORAGE 둘 다)

내부저장소 사용할거라 getFileDir()사용했는데 이 부분이 문제 일까요?

제발 알려주ㅅㅔ요 ㅠㅠㅠ

public void onClickCapture(View v) {
  
        String path = getFilesDir()+"PageCapture";
        final FrameLayout capture = (FrameLayout) findViewById(R.id.frame);//캡쳐할영역(프레임레이아웃)

      
        File file = new File(path);
        if(!file.exists()){
            file.mkdirs();
            Toast.makeText(this, "폴더가 생성되었습니다.", Toast.LENGTH_SHORT).show();
        }

        SimpleDateFormat day = new SimpleDateFormat("yyyyMMddHHmmss");
        Date date = new Date();
        capture.buildDrawingCache();
        Bitmap captureview = capture.getDrawingCache();
        FileOutputStream fos = null;
        try{
            fos = new FileOutputStream(path+"/Capture"+day.format(date)+".jpeg"); 
            captureview.compress(Bitmap.CompressFormat.JPEG, 100, fos); 
            sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + path + "/Capture" + day.format(date) + ".JPEG")));
            

            Toast.makeText(this, "저장완료", Toast.LENGTH_SHORT).show();

            fos.flush();
            fos.close();
            capture.destroyDrawingCache();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

 

개발뉴비 (650 포인트) 님이 2020년 7월 16일 질문

1개의 답변

0 추천
 
채택된 답변
getFilesDir()은 앱의 Private 저장소의 디렉토리를 return 합니다. 공유되지 않는 스토리지이기 때문에 갤러리에서는 표시하지 않습니다. 말씀하시는 내부 저장소라는 것은 아마도 보통 카메라앱 등이 파일을 저장하는 위치를 말씀하시는 것 같은데요. 그것은 내장 스토리지중에 공유 저장소로 사용되는 공간입니다.

Environment.getExternalStoragePublicDirectory 를 사용해서 해당 디렉토리의 위치를 가져올수 있습니다. 공유 미디어를 저장하는 방식은 Android Q에서 변화가 있으니 해당 문서를 잘 살펴보고 처리하셔야 합니다.
회색 (21,000 포인트) 님이 2020년 7월 16일 답변
개발뉴비님이 2020년 7월 16일 채택됨
답변해주신 내용으로 진행중인데, 파일이 생성되지 않고 실패합니다 ㅠㅠ 혹시 코드 한번 봐주실 수 있을까요? 폴더 생성이 안되는 이유를 모르겠습니다 ㅠㅠ
File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS+"/testDir");
File dir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "testDir");
        
        if(!dir.exists()){
            Log.e("FILE", "DIRECTORY NOT CREATED");
        }else{
            Toast.makeText(this,"폴더 생성 성공",Toast.LENGTH_SHORT).show();
        }

버튼을 클릭하면 파일이 생성되게 하려고 합니다 ㅠㅠ..
...