프로그래밍과 잡담

롤리팝에서 외장메모리 쓰기에 대해서 대충 알거 같군. 본문

프로그래밍/안드로이드

롤리팝에서 외장메모리 쓰기에 대해서 대충 알거 같군.

크레온 2015. 9. 29. 01:00

안드로이드가 롤리팝으로 업데이트되면 킷켓에서 외장메모리에 쓰기 방법을 막았는데 다시 롤리팝에서 부활했다.


그것을 어떻게 하는가 하니



// 이것을 호출한다.   Intent.ACTION_OPEN_DOCUMENT_TREE가  롤리팝에서 추가되었다.
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE);
startActivityForResult(intent, 42);


그리고 나면 창이 뜰 테고 사용자가 선택하면 그 결과가 아래의 메소드로 들어온다.



//사용자가 선택하면 선택한 결과가 resultData로 들어온다.
public void onActivityResult(int requestCode, int resultCode, Intent resultData) {
    if (resultCode == RESULT_OK)
   {
        Uri treeURI = resultData.getData();
        DocumentFile file = DocumentFile.fromTreeUri(getActivity(), treeURI);
        
        //파일을 생성할꺼면 
       DocumentFile newFile = file.createFile("text/plain", "test.txt");
       try {
                OutputStream out = resolver.openOutputStream(newFile.getUri());
                out.write("Test".getBytes());
                out.close();
       }catch (Exception e)
       {  // 처리 }
   }


위와 같이 처리하면 되는데 문제는 계속 위와 같이 하면 뭔가 할 때마다 선택하는 창이 뜨는 불상사가 생기지..


그걸 방지하기 위해서는


저기에서 treeURI를 저장해놓고 사용하면 된다.


즉, treeURI.toString() 해가지고 이걸 데이터베이스든지 어디든지 간에 저장해두고 필요할때 이걸 불러서 


DocumentFile.formTreeUri를 통해서 사용하면 된다는 것.


반응형
Comments