반응형
안드로이드 6.0 이상부터 필요한 권한 획득 코드
- 예제는 폰상태, 카메라, 오디오녹음 세개의 권한을 요청
define
public static final int PERMISSION_1 = 10000;
onCreate
if (checkPermission(new String[] {Manifest.permission.READ_PHONE_STATE, Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, PERMISSION_1)) {
initPrcss();
}
권한 요청 Function
@TargetApi(Build.VERSION_CODES.M)
public boolean checkPermission(String[] permissions, int type) {
//type : PERMISSION_1이 넘어옴
try {
// 안드로이드 6.0 미만 (마시멜로 미만) 버전 퍼미션 체크 패스
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
return true;
}
boolean isNotGrant = false;
// 필요한 권한 중 거부되어 있는 권한이 있는지 체크
for(String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission) != PackageManager.PERMISSION_GRANTED) {
isNotGrant = true;
break;
}
}
if (isNotGrant) {
// 안드로이드 권한 요청
ActivityCompat.requestPermissions(this, permissions, type);
return false;
}
}catch (Exception e) {
e.printStackTrace();
}
return true;
}
권한 요청 응답
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
try {
ArrayList<String> deniedPermissionArrayList = new ArrayList<String>();
boolean grant = true;
int i = 0;
// 퍼미션이 모두 승인되었다면, grant = true
for (int isGrant : grantResults) {
if (isGrant != PackageManager.PERMISSION_GRANTED) {
grant = false;
deniedPermissionArrayList.add(permissions[i]);
}
i++;
}
// 권한을 승인했을 경우
if (grant) {
initPrcss();
} else {
failPrcss();
}
} catch (Exception e) {
e.printStackTrace();
}
}
권한 요청 성공/실패 시의 Function
//성공시
void initPrcss() {
//...
}
//실패시
void failPrcss() {
//...
}
(참고) 앱설정 이동 : 권한획득 실패시에 이동을 위해
Intent intent = new Intent(Settings.ACTION_MANAGE_APPLICATIONS_SETTINGS);
intent.setFlags(FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
반응형
'안드로이드' 카테고리의 다른 글
Android Webview(Remote, Local) (2) | 2021.11.14 |
---|---|
Android Keyboard Show/Hide 이벤트 수신 (0) | 2021.11.14 |
Android adb 사용 (0) | 2021.11.14 |
Android Version List (1) | 2021.11.14 |
Android RecyclerView StaggeredGrid (0) | 2021.11.14 |
최근댓글