Android 6.0 버전 ( 마시멜로우 버전) 부터 PERMISSION 설정을 사용자가 개별로 설정할 수 있게 변경되었습니다.


오버레이 설정 관련 PERMISSION은 http://kylblog.tistory.com/8 이전 포스트에서 먼저 설명드려서 참고하시면 됩니다!


PERMISSION 관련되어 한번 정리를 해보도록 하겠습니다.



이 표에 해당하는 Permissions은 꼭 사용자에게 권한 요청을 해야 하는 Permissions 입니다.


Permission Group

Permissions
CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE


출처: http://gun0912.tistory.com/55







외부 저장소를 위한 PERMISSION 요청 설정



위의 두가지 STORAGE PERMISSION을 위한 허가 요청 문입니다.

 private void checkPermission() {

   if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // 마시멜로우 버전과 같거나 이상이라면
if(checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
|| checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
if(shouldShowRequestPermissionRationale(Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
Toast.makeText(this, "외부 저장소 사용을 위해 읽기/쓰기 필요", Toast.LENGTH_SHORT).show();
}

requestPermissions(new String[]
{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.READ_EXTERNAL_STORAGE},
2); //마지막 인자는 체크해야될 권한 갯수

} else {
//Toast.makeText(this, "권한 승인되었음", Toast.LENGTH_SHORT).show();
}
}
}


checkPermission() 을 호출 하면 사진/ 미디어/ 파일에 대한 요청문이 나오면서 거부, 허용 을 할 수 있도록 합니다.

허용, 거부에 대한 결과 값을 잡아 주는 메소드는 OnRequestPermissionResult 입니다.

예시로는 저 메소드에 대한 검색을 통해 사용해보시면 됩니다.



위의 권한이 필요한 코드가 실행이 되며 권한 요청이 없다면 코드가 실행되지 않습니다!

일부 앱에서는 처음 실행 할 때 필요한 권한을 모두 요청받는 형태로 구현하기도 하며

권한 체크 하는 라이브러리 까지 만들어 제공해 주고 있다니 찾아보시면 도움이 되리라 생각합니다!


-------------------------------------------------------------------------------------------------
 OnRequestPermissionResult 사용방법 추가 - 20170809

requestPermissions 메서드는
shouldShowRequestPermissionRationale : (한번 거절 후 다시보지 않기 체크 되기 전까지 계속 호출될 수 있는 것)
에서 다시보지않기 체크 후엔 다이얼로그 호출이 되지 않아 다시 되묻는 것이 없어 .. 그 이벤트를 잡아주는 다이얼로그가 필요합니다.
사용자가 권한 허용을 다시보지않기 체크할 만큼 끝까지 안하는 경우에 말이죠..

 @Override

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResult){
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  //위 예시에서 requestPermission 메서드를 썼을시 , 마지막 매개변수에 0을 넣어 줬으므로, 매칭
  if(requestCode == 0){
     // requestPermission의 두번째 매개변수는 배열이므로 아이템이 여러개 있을 수 있기 때문에 결과를 배열로 받는다.
     // 해당 예시는 요청 퍼미션이 한개 이므로 i=0 만 호출한다.
     if(grantResult[0== 0){
        //해당 권한이 승낙된 경우.
     }else{
        //해당 권한이 거절된 경우.

위의 onRequestPermissionsResult 메서드는 마지막에 항상 결과값 리턴을 위해 호출되는 메서드로

이것을 활용하여 권한을 되묻는 것을 자체적으로 추가하시면 됩니다.

+ Recent posts