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

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

by 인터넷떠돌이 2017. 3. 2.
반응형

안녕하세요?


3번 연속 포스팅에서 계속해서 위험한 권한을 부여하는 작업에 애를 먹었는데, 이번 포스팅에서는 그런데로 해결책이 나와서, 그 내용을 포스팅하고자 합니다.



우선은 기존에 startActivity(변수이름); 을 코딩하면, 여기서 권한의 문제로 계속 빨간색 밑줄이 그어지게 되었습니다. 결국 밑줄이 쳐 있는 곳에서 Alt+Enter를 치면, 위 스크린샥과 같이 권한을 체크하는 문구가 나오게 됩니다. 여기서 저는 밑줄이 쳐져 있는 this가 무엇인지 몰라서 애를 먹었습니다.


결국 여러번 알아본 결과 여기는 context context라는 부분으로 소위 context라는 것이 들어가는 부분이라는 것을 알아냈습니다. 그리하며 getApplicationContext() 라는 메서드를 입력하자, 여기서 발생하는 에러는 일단 해결이 되었습니다. 그래서 다음과 같이 코딩을 하였습니다.


int order = ContextCompat.checkSelfPermission(getApplicationContext(),Manifest.permission.CALL_PHONE);

if(order == PackageManager.PERMISSION_DENIED){


여기까지 입력하면, 내용이 변수 order를 선언하는데, 이 order는 전화걸기 기능에 대한 권한이 부여되어 있는 지를 확인하라는 의미가 됩니다. 그리고 밑의 if 문은 만약 변수 order가 허락이 거절되어 있다면 으로 시작을 합니다. 이제 if 문에서 권한이 없다고 하니까, 이제는 권한을 요청하는 구문을 적어야 하는 차례가 되었습니다.


ActivityCompat.requestPermission(mainActivity, new String[]{Manifest.permission.CALL_PHONE},1000):


문제는 mainActivity라는 구문이 처음에는 도저히 몰라서, 도저히 어떻게 할 수 없었습니다. 이게 context인가 싶어서 getApplicationContext() 라는 메서드도 소용이 없고 했는데, 가만히 보자 아래의 그림과 같이 미리 변수로 선언을 해야만 하는 것이었습니다.



거의 가장 시작지점에서 private라고 해서 지정을 한 다음 private Activiry mainActivity = this; 라는 식으로 변수 선언을 한 다음에 여기다가 집어넣어야 하는 것이었습니다. 이렇게 해서 실제로 스마트폰에서 실행을 시켜본 결과 다음과 같은 문제점이 나왔습니다.


최초로 앱을 설치해서 원래 있던 [전화걸기] 버튼을 누르자, 앱이 종료가 되었습니다. 그리고 나서 다시 앱을 실행시키고 버튼을 누르자 전화가 걸렸습니다. 그래서 어딘가 문제가 있다고 생각해서 아래와 같이 return을 추가하였습니다.



권한을 요청하고 나서 다시 돌아가라는 명령어를 입력하자, 이번에는 오류가 발생해서 인지 앱이 강제로 종료되지 않고, 버튼을 누르기 전으로 돌아가는 것을 볼 수 있었습니다. 그리고 나서 앱을 삭제하고 다시 설치한 다음, 다시 버튼을 누르자 이번에는 강제로 종료가 되지 않고 전화를 거는 것을 볼 수 있었습니다.


마지막으로 전화가 제대로 걸리는 것을 스크린샷으로 찍은 화면이 옆에 있습니다. 아래쪽에 Toast를 이용해서 텍스트를 띄우고자 하는 메세지가 제대로 뜨는 것을 볼 수 있었습니다.


이것으로 일차적으로 전화를 거는 앱을 만드는 것에는 성공했습니다만, 무언가 부족한 것이 없는지는 의심이 듭니다.


일단 제대로 권한을 획득하기 위한 창이 뜨는 것을 볼 수는 있는데, 문제는 버튼을 눌러서 권한을 얻은 다음, 바로 실행이 되지 않는 것이 흠이라면 흠이라는 생각이 듭니다. 그리고 권한을 획득하는 대화창에서 거절을 눌렀을 경우 어떻게 된다는 것이 없기 때문에, 이에 대한 프로그램 코딩도 필요하다는 생각이 듭니다.


안드로이드가 6.0으로 업그레이드 되면서 새로 생긴 권한 허용기능을 제대로 다루기가 제 레벨에서 지금은 어렵지만, 그래도  계속해서 시도해 보니 어떻게 해결책이 보이기 시작하기는 시작했습니다. 


이왕 시작한 김에, 권한 허용창에서 거절했을 때를 대비한 코딩까지 다 완성해서 다음 포스팅에 올리도록 하겠습니다.

반응형