티스토리 뷰
반응형
예제를 진행하면서 어플에 권한을 부여하는 방법에 대해서 진행하겠다.
( 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에 대한 응답인지에 대한 판단이다.
솔직히 이게 필요한가싶기는 하다. 굳이굳이 없어도 진행하는데 문제는 없다.
반응형
'Android > Concept' 카테고리의 다른 글
[Android] Thread와 Handler ( Feat. Sub Thread에서의 UI 설정 ) (0) | 2019.08.19 |
---|---|
[Android] Thread 제약사항 (0) | 2019.08.19 |
[Android] 브로드캐스트 리시버 ( Feat. 별쾅쾅 ) (0) | 2019.08.01 |
[Android] 액티비티의 생명주기 (0) | 2019.07.29 |
[Android] Bundle (0) | 2019.07.29 |