Development record of developer who study hard everyday.

레이블이 onRequestPermissionResult대체인 게시물을 표시합니다. 모든 게시물 표시
레이블이 onRequestPermissionResult대체인 게시물을 표시합니다. 모든 게시물 표시
, , ,

안드로이드 자바(JAVA) onRequestPermissionResult deprecated 대체

 onRequestPermissionResult(deprecated) 대체

안드로이드 블로그

회사에서 기존 프로젝트를 유지보수하고있다.

원래는 앱이 시작하자마자 모든 권한을 다 요청하는 로직이였다.

이 방식은 구글에서 권장하는 방식이 아니므로 이번에 권한 팝업을 넣고 권한요청을 각각 기능이 필요할 때 요청하기로 했다.

그런데 작업을 하다가 onRequestPermissionResult가 deprecated가 되었다는 것을 새삼 깨달았다. ㅎㅎ

원래 알고는 있었지만 자주 사용은 안했던 녀석이라 이번에 제대로 써보고 블로그에도 기록하기로 했다.

onRequestPermissionResult가 deprecated 되었기때문에 이제는 ActivityResultLauncher를 사용한다.


1. dependency 추가

dependencies {

def activity_version = "1.4.0"
implementation "androidx.activity:activity:$activity_version"
}

내가 유지보수하는 앱이 하도 오래된거라 androidx.activity 종속성이 추가되어있지않았다.

나처럼 종속성이 추가되어있지 않으면 추가해준다.


2. 권한 한 개 요청

예를 들어, 전화 권한을 요청한다고 해보자.

ActivityResultLauncher<String> phoneNumberPermissionLauncher = registerForActivityResult(new ActivityResultContracts.RequestPermission(), (result -> {
if(result) {
//권한 허용 시 동작할 코드
}
}));

주석처리된 부분에 권한을 허용 했을 때 동작할 코드를 작성해준다.


phoneNumberPermissionLauncher.launch(Manifest.permission.READ_PHONE_NUMBERS);

ActivityResultLauncher는 위 코드처럼 실행해준다.

처음에는 낯설지만 requestCode를 따지지 않아도되서 코드가 깔끔해진다.

자주 써보면서 익숙해지자!


3. 권한 여러개 요청

예를 들어, WRITE_EXTERNAL_STORAGE와 READ_EXTERNAL_STORAGE 권한을 동시에 요청한다고 해보자.

ActivityResultLauncher<String[]> filePermissionLauncherUnder28 = registerForActivityResult(new ActivityResultContracts.RequestMultiplePermissions(), (resultMap) -> {
for(String permission : resultMap.keySet()) {
boolean isGranted = Boolean.TRUE.equals(resultMap.get(permission));
Log.d(TAG, permission + " : " + isGranted);

if(!isGranted) return;
}

//권한 전부 허용 시 진행할 코드
});

결과값이 MutableMap<String, boolean> 타입의 값으로 넘어온다.


String[] filePermission = new String[] { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE };
filePermissionLauncherUnder28.launch(filePermission);

사용방법은 역시나 간단하다.

launch 메소드에 권한 배열을 넘겨주면된다.








Share:
Read More