brunch

You can make anything
by writing

C.S.Lewis

by Noah Dec 10. 2015

안드로이드 마쉬멜로우 권한 #2

READ_PHONE_STATE, WRITE_EXTERNAL_STORAGE

https://brunch.co.kr/@babosamo/49

마쉬멜로우 권한 1편에 이어서 오늘은 2편을 포스팅합니다.


이번에 브런치 안드로이드에 적용한 권한은 아래와 같습니다

READ_PHONE_STATE

WRITE_EXTERNAL_STORAGE

CAMERA



어디서 권한을 체크할 것인가?

위에 권한 중에서  READ_PHONE_STATE과 WRITE_EXTERNAL_STORAGE 은 없으면 앱이 정상 동작하는 부분이 거의 없습니다. 그래서 항상!? 저 권한을 갖고 있어야 하고, 반대로 CAMERA 권한은 사진 찍기 기능을 사용하지 않으면 필요가 없습니다.


꼭 필요한 2가지 권한은 앱이 시작될 때 확인.

특정 기능에서만 필요한 권한은 특정 기능 사용 전에  확인하도록 처리하였습니다.


재현 방법


안드로이드에서 앱 권한에서 저장, 전화를 끈다. (그러지 맙시다. 필요한 기능이에요)


권한 확인방법

onCreate 함수에서 권한을 체크한다.

권한이 있으면 기존과 동일한 동작을 하도록 하면 되고, 권한이 없으면 권한을 요청한다.

권한 획득 방법

권한이 없는 퍼미션을 찾아서 그 권한을 요청한다.


권한 요청 화면

N 개의 권한을 요청하면  1/N으로 권한을 받도록 처리한다.

권한 요청 실패

권한이 정상적으로 획득되지 않았을 경우에는 onRequestPermissionResult 함수가  호출된다.

여기서 요청한 권한이 없을 때 어떻게 처리할지를 결정해야 한다.

권한이 없어서 앱을 사용하게 할지. 아니면 앱을 종료 처리할지

브런치는 종료 처리했다.

권한 요청 성공

권한 요청이 성공하게 되면 Acitvity 다시 실행된다

http://developer.android.com/intl/ko/reference/android/support/v4/app/ActivityCompat.html



추가로  Fragment에서  requestPermission을 호출해야 할 경우 ActivityCompat.requestPermissions 대신에 this.requestPermissions (v4 fragment)를 호출한다.

이유는. ActivityCompat의  requestPermissions를 호출하면 권한 획득 실패시 fragment에서 onRequestPermissionsResult 가 호출되지 않는다.



결론적으로 마시멜로우로 가면서 앱이 설치될 때 사용자가 특정 앱의 권한을 끌 수 있다.

하지만 앱에서는... 그 기능이 없으면 정상 동작할 수 있을까?

대부분 정상 동작할 수 없을 것이다.

안될걸 가정하고 만들지 않았을 테니까...

하지만 마시멜로우로 가면서 안될 것도 감안하면서 만들어야 하는 것 같다.


매거진의 이전글 안드로이드 마쉬멜로우 권한 #1
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari