어느 개발자의 스토리
[Unity 개발] 안드로이드 13버전 권한 관련 문제 본문
현재 개발중인 게임에서 외부 저장소 읽기 권한을 요청하는데
테스트 기기 중 안드로이드 업데이트 이후
안드로이드 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);
}
}
}
* 해당 해결 방법은 저의 추측을 통한 해결 방법이므로 틀릴 수도 있습니다.
'유니티 개발' 카테고리의 다른 글
[Unity 개발] 유니티 그래픽 옵션 설정 구현하기 (0) | 2022.05.02 |
---|