아무리 사용자의 개인정보가 중요하지만 ㅠㅠ 개발자는 피곤해지네요. 안드로이드 6.0 이후 버전부터는 반듯이 권한 체크하는 코드가 필요해져 버렸어요.  또 언제 사용자가 권한을 해지할지 모르니, 해당권한을 사용하기전에는 무조건 권한이 승인되어 있는지 확인해야되구요. 귀찮지만 어쩔 수 없죠. 구현해야지요.

사용자 발신목록에 접근해야되는 코드를 예로 들어볼께요. 예전같으면 그냥 이거만 manifests 파일에 넣어주면 끝났는데, 지금은 안되요.


<uses-permission android:name="android.permission.READ_CALL_LOG"/>


첫번째 구현해야되는코드는, 권한 있는지 체크하기


//------------------------------------------------

private int REQUEST_CALL_LOG = 1;

private Activity mainActivity = this;

//------------------------------------------------


int permissionCheck = ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_CALL_LOG);


if (permissionCheck == PackageManager.PERMISSION_DENIED) 

{

    // 권한이 없는경우 권한 요청

    ActivityCompat.requestPermissions(mainActivity, 

                                                  new String[]{Manifest.permission.READ_CALL_LOG},

                                                  REQUEST_CALL_LOG);

else 

{

    // 권한이 있으면 바로 전화목록 바로 접근

}



요런게 필요해요. 또 권한이 없는 경우에 사용자로부터 권한을 요구하는 창을열고 그 결과값을 입력받아서 처리하는 후처리과정도 필요하구요.






두번째 필요한 기능, 사용자로부터 받은 Permission 요구 결과값을 반영시키기


@Override

public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {

    super.onRequestPermissionsResult(requestCode, permissions, grantResults);

    switch (requestCode) {

        case REQUEST_CALL_LOG:

            for (int i = 0; i < permissions.length; i++) {

                String permission = permissions[i];

                int grantResult = grantResults[i];

                if (permission.equals(Manifest.permission.READ_CALL_LOG)) 

                {

                    if (grantResult == PackageManager.PERMISSION_GRANTED) 

                    {

                         // READ_CALL_LOG 권한 획득 성공

                    }

                } 

           }

     }

}


이렇게 두가지 루틴을 추가해줘야하니 좀 많이 귀찮아졌네요.


귀찮다고 업데이트를 미뤘더니만 예전에 만들었던 앱에서 문제가 생겨서 안되더라구요, 그래서 급히 수정해서 올렸답니다. 저 처럼 미루지 말고 바뀐 권한 체크 빨리 빨리 수정해서 올리도록 하자구요.