안드로이드 6.0(Marshmallow) 부터 권한(Permission) 부여 방식이 변경 되었다. 


안드로이드 6.0 이전버전에서는 앱 개발시, 단순하게 AndroidManifest.xml에 필요한 권한을 설정하는 것만으로 앱의 권한을 취득하여 개발자가 원하는 방향으로 권한을 이용 할 수 있었다. 


하지만 안드로이드 6.0부터는 앱의 권한을 Normal/Dangerous 권한으로 분류하였다.

Normal권한은 사용자의 개인정보 노출에 직접적인 위험에 빠지지 않는 권한으로 AndroidManifest.xml에 권한을 나열하는 것만으로 시스템을 통해 자동적으로 권한을 부여 받는다. 

Dangerous권한은 사용자 개인정보 노출에 위험한 권한을 요청하는 경우 AndroidMenifest.xml에 권한을 나열하는 것 분만 아니라, 추가적으로 사용자에게 권한에 대한 동의를 받아야 한다. 



위험 권한에 대한 정보는 안드로이드 공식 홈페이지를 통해 확인 할 수 있다.

https://developer.android.com/guide/topics/security/permissions?hl=ko#normal-dangerous


앱 권한을 획득 하기 위해서는 아래와 같은 과정이 필요하다. 



1. AndroidManifest.xml 등록

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

AndroidManifest.xml에 권한 등록은 이전 버전과 일하다. 

<uses-permisiion>을 통해 획득하고자 하는 권한을 입력해 주면 된다. 



2. checkSelfPermission 

checkSelfPermission 메소드를 이용하여, 원하는 권한이 이미 획득 되었는지 여부를 체크 한다.


3. requestPermission

checkSelfPermission를 통해 확인 했을 때 해당 권한을 아직 부여 받지 못했다면, requestPermission을 통해 해당권한을 사용자에게 요청한다. 

if(ContextCompat.checkSelfPermission(VoiceActivity.this,
Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {

String [] permissions = {Manifest.permission.RECORD_AUDIO};
ActivityCompat.requestPermissions(VoiceActivity.this, permissions,

REQUEST_RECORD_AUDIO_PERMISSION);
}


4. onRequestPermissionResult

onRequestPermissionResult 메소드는 권한 요청 결과를 받는 Callback이다. 

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);

switch(requestCode) {
case REQUEST_RECORD_AUDIO_PERMISSION:
permissionAccepted = (grantResults[0] == PackageManager.PERMISSION_GRANTED);
break;
}

if(!permissionToRecordAccepted) finish();
}


'Developer > Android' 카테고리의 다른 글

안드로이드 Makefile (NDK)  (2) 2014.12.08
Android NDK  (0) 2014.11.24
Eclipse ADT 플러그인 없이 안드로이드 프로젝트 생성 & 빌드하기  (0) 2014.10.08
Android MediaPlayer  (0) 2014.07.30
Fragment  (0) 2014.07.10
Posted by No names
,