Runtime Permission
02 Jul 2017 | Android PermissionPermission
안드로이드에서 App이 단말의 특정 기능을 이용하려면 권한을 가져야 합니다. 특정 기능은 예로 들어 다음과 같은 기능들이 있습니다.
- 파일 읽고 쓰기
- 네트워크 사용, 인터넷 접속
- 카메라 사용
- 문자 메세지, 주소록 읽기 등
기존에는 AndroidManifest.xml
파일에 개발자가 사용하려는 권한을 등록하게 되어 있었고,
Google Play 등의 마켓에서 해당 App을 설치할 때 사용자가 권한 확인을 하도록 했습니다.
그리고 사용자가 원하지 않는 권한이 있을 경우, 그 App을 아예 이용할 수 없도록 했었습니다.
하지만, 6.0 M(마시멜로우) 버전부터는 권한 획득 방법이 바뀌었습니다. App이 실행할 때 사용자에게 권한을 요청하도록 되었으며, 사용자가 특정 권한을 원하지 않을 경우 해당 기능만 빼고 동작할 수 있도록 되었습니다. (물론, App 개발자가 사용자가 권한을 허가하지 않았을 때의 동작도 구현해놓아야 합니다.)
예제
다음 예제는 외부 저장소에 파일을 쓸 수 있는 권한을 요청하는 예제입니다.
static final int PERMISSION_REQUEST_CODE = 100; protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); if (checkSelfPermission(permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { String[] permissions = new String[]{permission.WRITE_EXTERNAL_STORAGE}; requestPermissions(permissions, PERMISSION_REQUEST_CODE); } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); switch (requestCode) { case PERMISSION_REQUEST_CODE: if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { Toast.makeText(getApplicationContext(), "Permission 완료", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(getApplicationContext(), "Permission 실패", Toast.LENGTH_SHORT).show(); } break; } }