마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

런타임 퍼미션 관련하여 아래와 같이 구현하는데 조언 부탁드립니다.

0 추천
우선.. 펴미션 요청이 필요한 액티비티마다 일일히 onRequestPermissionsResult를 넣고싶지가 않아서

퍼미션 관련 로직들을 하나의 클래스로 묶어서 사용하려고 합니다.

onRequestPermissionsResult를 받는부분이 최소한 하나는 있어야 하니까, 액티비티도 하나 필요하구요.

그래서, 아래와 같이 구조를 짰습니다.

 

초기. 퍼미션이 필요한 액티비티에서 PermissionManager인스턴스 생성

1. PermissionManager에서 퍼미션 요청 ->

2. PermissionActivity에 요청할 퍼미션을 번들로 넘김 ->

3. PermissionActivity 시작 ->

4. onCreate에서 번들로 넘어온 퍼미션 값들로 ActivityCompat.requestPermissions 호출 ->

5. onRequestPermissionsResult로 결과 받아옴, 기타 거부등의 처리

6. onRequestPermissionsResult의 결과를 PermissionManager에 전달

 

이런식으로 구조를 짜는데, 문제가.. 6번인 onRequestPermissionsResult의 결과값을 PermissionManager에서 받아올 방법이 전무하네요.

우선 PermissionActivity 자체도 PermissionManager의 인스턴스를 생성한 액티비티가 호출하는 구조라

PermissionActivity 의 결과를 받는건 PermissionManager를 생성한 액티비티지, PermissionManager에서 받는 방법이 없더라구요..

뭐 서비스나, 브로드캐스트 리시버 같은걸 이용해볼까도 헀지만, 이것도 방법이 마땅치 않네요.

좋은 방법이 없을까요?

PermissionManager는 아무 클래스도 상속받지 않은 클래스입니다.
모나미153 (17,540 포인트) 님이 2016년 2월 25일 질문

1개의 답변

0 추천
 
채택된 답변

checkSelfPermission 해서 안 받았다면 다시 요청하면 되고, 받았다면 할 일 하면 되는 거 아닌가요?

PermissionManager 를 사용하는 이유가 뭔가요?

싱글턴이어도 재부팅하면 권한 받았다는 정보는 없어질테고요 

쎄미 (162,410 포인트) 님이 2016년 2월 26일 답변
모나미153님이 2016년 2월 26일 채택됨
그냥 activity단에서 requestPermission하는 경우
모든 액티비티에 onRequestPermissionsResult코드를 넣어야 해서요..
어느 액티비티에서 권한 요청이 이루어질지 모르거든요.
그래서 모든 경우의 수를 대응하려고 합니다.
그럴거면 차라리 제일 첫 액티비티에서 요청하는게 낫지 않아요?
그렇긴 한데, 맨처음에 다 요청받았따 치고 앱을 진행하게 되면
사용자가 중간에 권한설정을 바꾸는 경우에 대응 방법이 없어지는 문제가 있더라구요.
일단... 리스너를 하나 만들어서 serializable로 인텐트로 넘겨서 해보려고 합니다
정 안되면, 그냥 첫 화면에서 다 요청 한 다음
매번 킬떄마다 체크 해야죠 뭐,..
아니면 퍼미션 요청하는 액티비티를 상속을 받거나 해도 될 것 같네요
...