티스토리 뷰

반응형

예제를 진행하면서 어플에 권한을 부여하는 방법에 대해서 진행하겠다.

( SMS를 받았을 때의 Broadcast를 Receive할 수 있는 권한 획득 )

 

1.

사용할 권한을 AndroidManifest.xml 에 등록.

<uses-permission android:name="android.permission.RECEIVE_SMS" />
	// 권한을 사용자에게 요청(Request)한다.

   ← 위와같은 구문을 나열해서 필요한 권한을 모두 등록한다.

 

2.

권한등록이 별도로 필요한지 확인. ( SDK 23 이상은 필요 )

Android 6.0 (SDK 23) 이후 앱이 설치될 때가 아니라 앱이 실행되는 중에 앱에 권한을 부여하도록 정책이 변경되어서 이와 같은 권한등록이 별도로 필요하다.

 

3.

protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    
    if(checkSelfPermission(Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
    	// 전화에 대한 권한을 보유했는지 체크하고 GRANTED 되어있지 않으면 requestPermissions를 호출해 권한을 요청한다.
    	ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 101);
        // new String[] 배열에 다양한 권한을 일괄적으로 요청하도록 할 수 있지만 왠만해서는 이렇게 하지 말아라
    }
}

 

checkPermissions 함수 구현.

  - permissions 변수에는 등록할 권한들을 String 배열에 담아둔다.

  - ContextCompat.checkSelfPermission(this, pm)

     → 위 함수를 통해 이미 가지고있는 권한을 파악하고 없으면 List에 추가한다.

  - ActivityCompat.requestPermissions

     → 위 함수를 통해 권한목록을 넘겨서 권한을 획득할 수 있게 된다.

     → 마지막에 주는 정수(101)은 이후에 onRequestPermissionsResult 메소드에서 사용한다.

 

 

4.

onRequestPermissionsResult 메소드를 재정의해서 결과에대한 내용을 처리.

 

사용자가 허용 버튼을 클릭하면 이 함수를 호출하게 된다.

public void onRequestPermissionResult(int requestCode,
				String[] permissions,
                                        int[] grantResults) {
	switch(requestCode) {
    	case 101:
        	if(grantResults.length > 0 && grantResult[0] == PackageManager.PERMISSION_GRANTED) {
            	// 사용자가 승인 버튼을 클릭
            }else {
            	// 사용자가 거절 버튼을 클릭
                // 나쁜 개발자는 앱 종료할 수 있다.
                // 착한 개발자는 경고 후 다른 Activity로 이동할 수 있다.
            }
        	break;
        case 102:
        	// ...
        	break;
    }
}

 

  "case 101:" 이부분은 내가 보낸 request에 대한 응답인지에 대한 판단이다.

  솔직히 이게 필요한가싶기는 하다. 굳이굳이 없어도 진행하는데 문제는 없다.

반응형
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함