android check and set multiple permission
Posted by Albert 2816Day 16Hour 50Min 49Sec ago [2017-08-03]
예전에는 Manifest 에만 관련 권한을 추가하면 알아서 권한이 추가되었는데 안드로이드 6.0 마시멜로우 버전부터
사용자가 관련된 권한을 설정하겟금 프로그램상 처리를 해주어야 한다. 않해주면 권한이 부여 않됨.
여기서 간단한 샘플로 카메라와 저장폴더 쓰기권한을 추가하는걸 올리도록 하겠다.
1. 관련 앱에 주려는 퍼미션들을 설정하고 hasPermissions 함수를 통하여 권한 체크 한다.
public void checkPermission() {
int PERMISSION_ALL = 1;
String[] PERMISSIONS = {Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA};
if(!hasPermissions(this, PERMISSIONS)){
ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
}
2. 관련 퍼미션들을 처리하는 함수
public static boolean hasPermissions(Context context, String... permissions) {
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M && context != null && permissions != null) {
for (String permission : permissions) {
if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
}
return true;
}
3. 관련 퍼미션 실행결과를 여기서 확인가능하고 마지막에 다른작업을 하고 싶을시 여기에 추가하면 된다.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResult){
//위 예시에서 requestPermission 메서드를 썼을시 , 마지막 매개변수에 0을 넣어 줬으므로, 매칭
if(requestCode == 0){
// requestPermission의 두번째 매개변수는 배열이므로 아이템이 여러개 있을 수 있기 때문에 결과를 배열로 받는다.
// 해당 예시는 요청 퍼미션이 한개 이므로 i=0 만 호출한다.
if(grantResult[0] == 0){
//해당 권한이 승낙된 경우.
}else{
//해당 권한이 거절된 경우.
// showRequestAgainDialog();
}
}
}
4. 제일 마지막으로 앱시작의 시점에서 checkPermission(); 을 사용하면 끝난다.
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkPermission();
5. 더많은 퍼미션에 관하여서는 https://developer.android.com/training/permissions/requesting.html?hl=ko 에서 확인하면 된다.