Notice
Recent Posts
Recent Comments
Link
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
Archives
Today
Total
관리 메뉴

어느 개발자의 스토리

[Unity 개발] 안드로이드 13버전 권한 관련 문제 본문

유니티 개발

[Unity 개발] 안드로이드 13버전 권한 관련 문제

CornerKim 2023. 3. 13. 17:44
현재 개발중인 게임에서 외부 저장소 읽기 권한을 요청하는데
테스트 기기 중 안드로이드 업데이트 이후 
안드로이드 13버전에서 권한 요청 부분이 정상적으로 작동되지 않는 문제가 발생했다.

 

 
해결 방법을 찾던 중 안드로이드 13버전부터 권한 요청시
이전에 버전에 쓰인 "android.permission.READ_EXTERNAL_STORAGE" 권한이

 

 

더 이상 사용되지 않는 것으로 파악됐다. 
 
 
즉 13버전에서는 "READ_EXTERNAL_STORAGE" 대신
"READ_MEDIA_IMAGES", "READ_MEDIA_VIDEO", "READ_MEDIA_AUDIO" 세 가지 권한을 사용해야한다.
결국 권한 요청을 13버전 이후, 이전으로 나눠서 요청하는 코드를 작성해서 문제를 해결했다.
 
해당 코드는 아래와 같다.
   if (Application.platform == RuntimePlatform.Android)
        {
            int sdkVersion = 0;

#if UNITY_ANDROID && !UNITY_EDITOR
        AndroidJavaClass buildVersion = new AndroidJavaClass("android.os.Build$VERSION");
        sdkVersion = buildVersion.GetStatic<int>("SDK_INT");
#endif
            Debug.Log("Android SDK Version: " + sdkVersion);

            // 안드로이드 13버전부터 sdkVersion >= 33 
            if (sdkVersion >= 33)
            {
                string[] permissions = { "android.permission.READ_MEDIA_VIDEO" };
        
                // 저장공간(Write) 권한 체크(선택 권한)
                if (Permission.HasUserAuthorizedPermission(permissions[0]) == false)
                {
                    // 권한 요청
                    Permission.RequestUserPermissions(permissions);
        
                    yield return new WaitForSeconds(1f);
        
                    yield return new WaitUntil(() => Application.isFocused == true);
                }
            }
            else // 안드로이드 13버전 이전
            {
                // 저장공간(Write) 권한 체크(선택 권한)
                if (Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead) == false)
                {
                    // 권한 요청
                    Permission.RequestUserPermission(Permission.ExternalStorageRead);
        
                    yield return new WaitForSeconds(1f);
        
                    yield return new WaitUntil(() => Application.isFocused == true);
                }
            } 
        
        }​
 
* 해당 해결 방법은 저의 추측을 통한 해결 방법이므로 틀릴 수도 있습니다.