안녕하세요?


지난번 포스팅부터 안드로이드가 6.0으로 업데이트 되면서, 위험한 권한으로 분류된 '전화걸기'를 허락받기 위해서, 애를 쓰고 있습니다. 하지만, 새로운 책을 구입했음에도, 아직까지는 벽에 부딪쳐 있는 상황이기는 합니다.


우선 Do it 안드로이드 앱 프로그래밍 4판을 에서 다음과 같은 내용이 있었습니다.


int 변수이름 = ContextCompat.checkSelfPermission(this,Manifest.permission.얻고자 하는 권한);


먼저 이 구문을 추가해서, 아래 프로그래밍으로 권한이 있는지 없는지 여부를 체크하기 위해 들어가는 구문을 만듭니다.


if(변수이름 == PackageManager.PERMISSION_GRANTED) {

  Toast.makeText(this,"아무 텍스트 문구 1번",Toast.LENGTH_LONG).show();}

  else{

  Toast.makeText(this,"아무 텍스트 문구 2번",Toast.LENGTH_LONG).show();


여기까지 하면, 이제 변수이름이 얻고자 하는 권한이 있는지 없는지를 체크한 값인데, 그 값이 권한을 얻었다는 의미면, 아무 텍스트 문구 1번을 출력하라는 것이고, 권한이 없다는 의미면 아무 텍스트 문구 2번을 출력하라는 의미가 됩니다. 그리고 여기서는 아직 else의 마무리를 뜻하면 }이 아직 없습니다.


if(ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.얻고자 하는 권한)) {

  Toast.makeText(this,"아무 텍스트 문구 3번", Toast.LENGTH_LONG).show();}


여기서는 만약 사용자가 얻고자 하는 권한요청을 거부한다면, 아무 텍스트 문구 3번을 화면에 출력하라는 명령어입니다.


else {ActivityCompat.requestPermission(this, new String[] {Manifest.permission.얻고자 하는 권한},1);

      }

}


마지막으로 사용자가 얻고자 하는 권한 요청을 허용한다면, 얻고자 하는 권한을 실제로 요청하고, 요청한 값을 1로 지정하라 라는 의미가 있습니다.


그리고 나서  아래와 같은 코드를 입력한다고 합니다.


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


 switch(requestCode){

  case 1: {

            if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){

              Toast.makeText(this, "아무 텍스트 문구 4번", Toast.LENGTH_LONG).show();}

            else {

              Toast.makeText(this, "아무 텍스트 문구 5번", Toast.LENGTH_LONG).show();}

   returen;

   }

}

}


이 문구는 권한이 허용되었는지 여부를 요청해서 허용이 되었다면, 아무 텍스트 문구 4번을 출력하라는 의미이고, 아니면 아무 텍스트 문구 5번을 출력하라는 의미입니다.


일단 전체적으로 다음과 같이 코딩을 하였습니다.



다만 이렇게 하였지만, 맨 마지막에 starActivity(변수이름)이 여전히 권한이 부여되지 않았는 것을 알 수가 있었습니다. 이래서 한번 변경을 해보았습니다.



계속해서 변경을 해 보았지만, 코딩에서 계속해서 오류가 사라지지 않고 계속 남아 있는 것을 볼 수 있었습니다. 아무래도 아직 더 찾아봐야 할 내용이 많이 있는 것 같습니다.

+ Recent posts