가끔 안드로이드 소스를 접하고있는데...
기존에 만들어뒀던 코드가
내폰에서 갑작스레 에러를 토하면서 진행이 되지 않았다;;
관련 부분을 살펴보니...
안드로이드 6.0 마시맬로부터
기존에 그냥 사용하던 몇몇 권한을
사용자에게 요청하여 승인 받아서 진행하도록 되어있었다.
관련 부분을 간단하게 정리해두고자 한다.
샘플코드 : https://github.com/taehwandev/MAppPermission
권한 관련해서 꼭 필요한 API
<해당 권한이 현재 사용가능여부 확인>
ContextCompat.checkSelfPermission(this, Manifest.permission.권한코드) != PackageManager.PERMISSION_GRANTED
<해당 권한의 필요를 설명하는 코드 (사용자에게)>
ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.권한코드)
<권한 획득!>
ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.READ_PHONE_STATE},권한 요청 코드);
기본적으로 AndroidManifest.xml은 동일하게 필요로 하는 권한 요청 코드를 입력(버전과 상관없이...)
[참고로, 난 메인Activity에서 권한을 요청/사용하였음.]
cf) 'READ_PHONE_STATE' 권한 요청 사용
private void checkPermission() {
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
// // 사용자에게 권한 필요 설명이 필요한 경우
// if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_PHONE_STATE)) {
// // Explain to the user why we need to write the permission.
// Toast.makeText(this, "나는 이권한이 꼭 필요합니다~! ", Toast.LENGTH_SHORT).show();
// }
ActivityCompat.requestPermissions((this,new String[]{Manifest.permission.READ_PHONE_STATE},PERMISSIONS_REQUEST_READ_PHONE_STATE);
} else {
//코드 작성
}
}
권한 처리 요청후, 사용자 선택에 따라 호출되는 함수
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
//허용의 경우
if (requestCode == PERMISSIONS_REQUEST_READ_PHONE_STATE && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// 실행 할 코드
//거절의 경우
}else{
// 실행 할 코드
}
}
'이것저것 > My_Work' 카테고리의 다른 글
공유기 2대 연결(멀티브릿지) & WOL (2) | 2016.03.19 |
---|---|
삼성노트북 윈도우7설치 (4) | 2015.12.03 |
[안드로이드] - 리소스 아이디가 바뀔경우 참고 (0) | 2015.07.10 |
[android] - Activity 기반에서 window 밖의 영역 터치 방지 (0) | 2015.07.08 |
jQuery Form Validation (0) | 2015.04.24 |