본문 바로가기
일상생활 이야기/안드로이드 스튜디오 독학하기

안드로이드 스튜디오 독학하기 37일째

by 인터넷떠돌이 2017. 5. 4.
반응형

안녕하세요?


이번 시간에는 오랫만에 안드로이드 스튜디오를 독학하면서 한가지 해결책이 나오는 것과 동시에 한가지 골칫꺼리가 생겨서, 그 내용을 포스팅 하고자 합니다.



먼저 TextSDcardPath라는 프로젝트를 생성하도록 합니다. 지난번 부터 계속해서 SD카드에 들어가 있는 pdf파일을 읽을 수 없었는데, 그래서 여러가지 서적을 참고해 보고나서 한번 경로만이라도 읽도록 하자는 생각이 들어서 이런 프로젝트를 새로 만들었습니다.



먼저 activity_main.xml로 가서, design탭에다가 위와 같은 디자인을 하였습니다. 일단 텍스트 상자를 먼저 상단에다가 배치를 하여서, 나중에 여기다가 코딩을 입력했을 시, SD카드의 경로를 어떻게 읽는지를 표시하도록 하고자 합니다. 위 화면에서 보이는 바와 같이 먼저 ID는 Text001로 지정을 하였습니다.



다음으로는 MainActivity.java로 가서 위 스크린샷과 같이 코딩을 시작합니다. 주용한 것은 EditText인 입력상자가 아니라, 텍스트뷰이기 때문에 TextView로 입력을 해야 합니다. 먼저 setContentView아래에다가 텍스트뷰에 관한 ID를 지정하도록 합니다.



다음으로는 String 변수이름 = Environmet.getExternalStorageState();를 입력해서 외부 메모리가 현재 들어와 있는지 아닌지를 검사해야 합니다. 그리고 이어지는 구문은 다음과 같은 의미를 지니고 있습니다.


if(변수이름.equals(Environment.MEDIA_MOUNTED)){


변수이름이 외장 메모리가 들어와 있는 상태(Environment.MEDIA_MOUNTED)와 같은(equals)가? 만약에 같다면 아래와 같이 작동을 한다.


변수이름2 = Environment.getExternalStorageDirectory().getAbsolutePath();}


여기서는 변수이름2가 바로 외장 메모리의 경로를 찾아내서, 그 값을 경로로 지정한다는 의미가 됩니다. 당연 아래에 있는 else이후는 변수이름2에 외장 메모리가 없다는 값을 의미하는 경우가 됩니다.



다음으로는 텍스트뷰 아래에게다가 버튼을 하나 추가해서 한글로 [경로확인]이라고 지정을 하였습니다. 그리고 onClick속성에는 pathfinding이라고 지정을 하여서, 버튼을 누르면 텍스트뷰에서 외장 메모리-여기서는 SD카드의 경로를 표시하도록 할 준비를 마쳤습니다.



여기서는 public void로 시작하는 곳에다가 onClick속성을 지정해서 버튼을 누르면 일어나는 일을 지정하도록 합니다. 여기서 저는 정확한 형식은 모르지만, setText가 다음과 같이 사용될 수 있다는 것은 알 수 있었습니다.


텍스트뷰의 변수이름.setText(String.format("표시될 문자=%s",표시될 값-문자열값의 변수이름);


당연 %s라는 것은 , 뒤에 올 변수이름을 의미하는 값이 됩니다. 여기서는 한개의 변수 이름만 지정을 했지만, 사실은 ""사이에 여러개의 %s를 지정하고 나서, 여러개의 변수이름을 지정하는 방법도 있습니다.


예) setText(String.format("문자1=%s/n문자2=%s/n문자3=%s",변수이름1,변수이름2,변수이름3);


아무튼 이렇게 대략적인 경로를 지정하고 나서, 다음으로는 USB케이블로 스마트폰을 연결해서 실제 폰에서 제대로 동작을 하는지 알아보려 했습니다.



먼저 앱을 구동하자 제대로 앱이 실행되는 것을 확인할 수 있었습니다. 하지만, 버튼을 누르자 마자 앱이 종료가 되었는데, 그 이유는 바로 아랫쪽에 있던 finish(); 때문이였습니다. 그래서 이 finish();를 없애고 나서, 다시 USB에 연결된 스마트폰에서 앱을 실행시켰습니다.



제대로 경로가 뜨는 것을 볼 수 있었습니다. 하지만 이것으로 모든 문제가 해결이 된 것이 아니었습니다. 우선 근본적으로 위 경로는 다음과 같습니다.



즉 외장 메모리인 SD카드가 아니라, 폰 자체의 내장 메모리의 경로를 정확하게 지정하고 있는 것이였습니다. 이 문제는 따로 해결을 해야 할듯 합니다만, 당장에 해결책을 가지고 오기는 힘들어 보인다는 생각이 듭니다. 그래서 이번 포스팅에서는 어떻게 해야 제대로 내장 메모리의 경로라도 찾을 수 있는지를 다음과 같이 하면 알 수 있었습니다.


1)먼저 외장 메모리가 띄워져 있는지 여부를 java상에서 확인을 한다.

2)그리고 나서 getExternalStorageDirectory().getAbsolutePath()로 경로를 가지고 온다.


다만, 결과물이 내장 메모리를 확인해서 이 문제는....... 또 서적을 뒤져서 해결책을 찾아 봐야 겠다는 생각이 듭니다.

반응형