본문 바로가기

안드로이드 튜토리얼 목록/3. 다음맵 연동

6. 사용자에게 권한요청하기-1


안녕하세요?

요번에는 권한 관련을 튜토리얼을 먼저 다뤄야할것같습니다.

예전에는 매니페스트에 퍼미션만 명시하면 ,

사용자가 스토어에서 다운받을때 권한목록만 훑어보고 설치하는 수준이었는데..








마쉬멜로우(API 23)부터
추가적으로 사용자에게 팝업창을띄워 퍼미션을  승낙을 받아야 
엑세스가 가능하도록 정책이 바뀌었습니다.
(여전히 매니페스트에 퍼미션을 명시하는부분은 그대로입니다)





(에휴.. 뭘 이렇게 신경써야하는게 많은지 원..)





< 이전폰들 (API ~22) > 과 <마쉬멜로우 이상 폰들(API 23~) > 을 구분하여 
분기해서
로직을 처리해야하는 특별한 상황이 오게됐습니다.



이문제는 비단 GPS 관련 문제뿐만이 아니기때문에..
마쉬멜로우 퍼미션 관련 이슈를 구글링으로 알아보시기 바랍니다.
(무책임..) 







현재 다뤄야하는 분량이 길기때문에 우선 퍼미션 관련 대응만 다룹니다.






우선 왼쪽 탐색기의 app->manifests 를 더블클릭하면 우측에 xml형태로 펼쳐집니다.



우측 빨간쪽이 퍼미션을 명시하는 부분입니다.


첫째줄 : 인터넷 엑세스 입니다.
둘째줄 : GPS 엑세스 입니다.


위 그림을 참고하여 유저퍼미션 요소를 추가하시기 바랍니다.



보통 앱들은 스플래쉬(로딩화면) -> 메인화면
순서로 진행하지요?


스플래쉬에서 유저에게 퍼미션을 묻고나서 모두 허용할때만 메인화면으로 접근할수있도록
처리해보겠습니다.

우선 스플래쉬 액티비티를 만들어보겠습니다.









왼쪽 빨간표시부분을 우측마우스눌르면 위와같이 부메뉴가 뜹니다.
(New -> Activity -> Empty Activity) 클릭합니다.









위와같이 팝업창이 뜹니다.

스플래시 액티비티라는것을 쉽게 식별하기위해서

클래스와 레이아웃의 이름을 교체해봅니다.











위와같이 교체해봤습니다.
(Layout Name은 무조건 소문자!! 대문자넣으면 에러! 필히 인지하고계셔야해요!)

여기서 중요한점은..

안드로이드의 런처액티비티(앱구동시 가장먼저 실행될 액티비티)로 체크해야합니다.

그래야 앱이 구동되면 스플래시액티비티가 가장먼저 실행되게됩니다.

"Finish"클릭합니다.








생성되면 자동으로 레이아웃과 액티비티클래스가 에디터에 표시됩니다.


클래스파일은 java폴더안에..
레이아웃 파일은 res-layout 폴더안에...



이제.. 매니페스트에서 런처(가장먼저 실행될 액티비티)를


기존 "메인액티비티" ->"스플래시액티비티"로 알맞게 수정해야합니다.












위 빨간표시를 보시면

<activity> 엘리먼트 요소의 이름으로 "액티비티 클래스파일 이름"이 지정되있습니다.

만약 액티비티 클래스파일은 생성되있는데 매니페스트에 액티비티 요소가 추가가 안되있으면

앱이 강제종료됩니다.







해당 액티비티를 인텐트로 호출할때 꼭 이거 명시해야합니다.
(대부분 이런부분에서 실수를 하시더라구요)




왕이 둘이 될수없듯이..

한놈을 수하로 만들어야합니다.

메인액티비티가 왕좌에서 내려와야겠군요..









이렇게 원본소스는 주석처리해주시구요. 


스플래쉬 액티비티 엘리먼트 밑에 간단하게 추가해줍니다. 빨간위치참고!









이제 퍼미션 관련 대응코드를 넣어야할 상황인데요..


제가 생각한 프로세스는 이렇습니다.


앱구동 -> 스플래쉬 (퍼미션요청) -> 요청검사 -> 모두다 승낙하면 메인액티비티 호출


사용자가 퍼미션 요청을 취소한경우를 대비해서..
 
화면에 버튼을 배치하여  수동 퍼미션 요청 


이렇게 2가지 대안을 생각하고 처리해보겠습니다.




왼쪽 layout-acitivti_splash.xml을 더블클릭하신후


우측 밑에 "Text" 클릭하면 우측 에디터처럼 보이실겁니다.


위 소스내용을 참고하여 버튼을 추가해줍니다.


(미소분양은 디자인모드는 취급하지않습니다. 질문도 받지않습니다.)


공감과 리플 이웃추가는 글쓴이에게 큰힘이 됩니다. 



랜공사 잘한다고 칭찬이 자자한 더블넷


https://더블정보통신.kr/