본문 바로가기
프로그램 개발해서 돈벌기/Android

android version 13(API Level 33) 업데이트 후 onResume 연속 호출 문제(읽기 권한 세분화 문제)

by ubmuhan 2023. 6. 8.
반응형

안드로이드 버전 12로 배포 중이던 앱을 안드로이드 13으로 업그레이드해서 배포를 했습니다.

그런데 갤럭시 23 계열 (안드로이드 버전 13)에서 앱이 시작은 하는데 화면이 터치도 안되고 멈추어 있다는 고객 이슈가 들어왔습니다.

 

 

그래서 해당 기기를 수배해서 디버깅을 해 보니 onResume이 연속해서 호출이 되고 있었습니다.

onResume이 연속 호출되는 현상은 읽기 권한 문제로 파악되었습니다.

기존에는 READ_EXTERNAL_STORAGE만 선언해서 사용했으나 안드로이드 버전 13부터는 권한이 세분화되었습니다.

 

 

AndroidManifest.xml에 위 권한을 추가해 주면 됩니다.

 

 

권한 요청 확인 및 다이얼로그 호출은 아래와 같이 진행했습니다.

 

if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.TIRAMISU) {
    if(checkSelfPermission(Manifest.permission.READ_MEDIA_IMAGES) == PackageManager.PERMISSION_GRANTED) {
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_MEDIA_IMAGES}, 1);
    }

    if(checkSelfPermission(Manifest.permission.READ_MEDIA_VIDEO) == PackageManager.PERMISSION_GRANTED) {
    } else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_MEDIA_VIDEO}, 1);
    }
} else if (Build.VERSION.SDK_INT >= 23) {
    if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
        return true;
    }
    else {
        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
        return false;
    }
}

 

안드로이드 API Level 23 버전부터 지원할 때 코드입니다.

 

사실 onResume 시작 때 쓰기 권한을 확인을 해서 발생한 문제입니다. 안드로이드 버전 13에서 쓰기 권한 요청을 하면 쓰기 권한 요청 다이얼로그가 안 나타나고 리프레시가 되면서 onResume이 연속해서 호출된 겁니다. 위 코드처럼 안드로이드 버전 13에서 쓰기 권한 요청 다이얼로그 요청 없이도 쓰기 작업이 잘 진행되었습니다. 관련해서는 더 찾아봐야 할 듯 보입니다.

 
반응형

댓글