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

DOCUMENT_TREE를 사용한 SD카드(ExternalStorage) 권한 질문 드립니다.

0 추천

 

Intent excard = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(excard, REQUEST_CODE_SECONDARY_STORAGE_ACCESS_PERMISSION);
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (resultCode == RESULT_OK) {
        switch (requestCode) {
            case REQUEST_CODE_SECONDARY_STORAGE_ACCESS_PERMISSION:
                Uri treeUri = null;
                treeUri = data.getData();
                SharedPreferences address = getSharedPreferences("address", Activity.MODE_PRIVATE);
                SharedPreferences.Editor editor = address.edit();
                editor.putString("sdcard",treeUri.toString());
                editor.commit();

                final int takeFlags = data.getFlags()
                        & (Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
                getContentResolver().takePersistableUriPermission(treeUri, takeFlags);

explorer등 여타 탐색기 어플들을 보면 이렇게 도큐먼트트리 불러서 최상단 SD카드만 잡아주면 하위 폴더도 다 사용할 권한이 생기는데요

제가 저장하는 방법이 문제인지 저기서 폴더를 지정한걸 다른데에서 사용하면 그게 되지 않습니다.

 

프리페어런스에 넣어둔 값은, 테스트 목적으로 아래에 파일을 생성할때에는 불러오지 않고

일부러 그냥 적어서 했는데요

 

 

Uri treeUri = Uri.parse("content://com.android.externalstorage.documents/tree"+"/5462-A548:거북이");
DocumentFile file = DocumentFile.fromTreeUri(this, treeUri);
DocumentFile newFile = file.createFile("text/plain","테스트"+System.currentTimeMillis() + 32400000+".txt");
try {
    OutputStream outs  = this.getContentResolver().openOutputStream(newFile.getUri());
    outs.write("test".getBytes());
    outs.close();
}catch (Exception e){

}

 

요렇게 저장을 할때 SD카드 최상단을 잡으면 저장이 되지 않고.

거북이 폴더를 직접 클릭 하고 들어가야만 저장이 되더라구요

 

제가 만드는 어플이 자유롭게 현재위치에서 파일을 불러오고 그 위치 그대로 저장을 하는데

내장메모리에선 잘 되었지만 SD카드 내에선 골치가 아파져서 너무 어렵네요 ㅠㅠ

탐색기 어플들처럼 자유롭게 그 위치 그대로 변경이나 저장을 하고 싶습니다.

 

도움 부탁드려요

 

SHParks (140 포인트) 님이 2018년 7월 24일 질문
SHParks님이 2018년 7월 24일 수정

답변 달기

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