반응형
안드로이드 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 |
최근댓글