반응형
Android, iOS를 위한 퍼미션 기능을 Wrapping 했습니다.
using Cysharp.Threading.Tasks;
using UnityEngine;
#if PLATFORM_ANDROID
using UnityEngine.Android;
#endif
public class PermissionWrapper
{
public enum Type
{
Camera,
Microphone,
FineLocation,
CoarseLocation,
ExternalStorageRead,
ExternalStorageWrite,
}
public static bool HasUserAuthorizedPermission(Type type)
{
#if PLATFORM_ANDROID
switch (type)
{
case Type.Camera: return Permission.HasUserAuthorizedPermission(Permission.Camera);
case Type.Microphone: return Permission.HasUserAuthorizedPermission(Permission.Microphone);
case Type.FineLocation: return Permission.HasUserAuthorizedPermission(Permission.FineLocation);
case Type.CoarseLocation: return Permission.HasUserAuthorizedPermission(Permission.CoarseLocation);
case Type.ExternalStorageRead: return Permission.HasUserAuthorizedPermission(Permission.ExternalStorageRead);
case Type.ExternalStorageWrite: return Permission.HasUserAuthorizedPermission(Permission.ExternalStorageWrite);
}
#elif UNITY_IOS
switch (type)
{
case Type.Camera: return Application.HasUserAuthorization(UserAuthorization.WebCam);
case Type.Microphone: return Application.HasUserAuthorization(UserAuthorization.Microphone);
}
#endif
return true;
}
public static async UniTask RequestUserPermission(Type type)
{
#if PLATFORM_ANDROID
switch (type)
{
case Type.Camera:
Permission.RequestUserPermission(Permission.Camera);
break;
case Type.Microphone:
Permission.RequestUserPermission(Permission.Microphone);
break;
case Type.FineLocation:
Permission.RequestUserPermission(Permission.FineLocation);
break;
case Type.CoarseLocation:
Permission.RequestUserPermission(Permission.CoarseLocation);
break;
case Type.ExternalStorageRead:
Permission.RequestUserPermission(Permission.ExternalStorageRead);
break;
case Type.ExternalStorageWrite:
Permission.RequestUserPermission(Permission.ExternalStorageWrite);
break;
}
#elif UNITY_IOS
switch (type)
{
case Type.Camera:
await Application.RequestUserAuthorization(UserAuthorization.WebCam);
break;
case Type.Microphone:
await Application.RequestUserAuthorization(UserAuthorization.Microphone);
break;
}
#endif
await UniTask.WaitForSeconds(0.2f);
await UniTask.WaitUntil(() => Application.isFocused == true);
}
}
안드로이드의 경우 AndroidManifest.xml 수정
1. 유니티에서 자동 권한요청 기능 비활성화
<meta-data android:name="unityplayer.SkipPermissionsDialog" android:value="true" />
2. 권한요청 추가
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
반응형
'dev' 카테고리의 다른 글
[Unity] 앱 설정 화면 진입하는 플러그인 (0) | 2024.04.04 |
---|---|
Addressables 특정번들 캐시 삭제 (0) | 2023.10.23 |
[Unity] 어드레서블 에셋 시스템으로 메모리 최적화 (0) | 2022.10.14 |
[Unity] Localization (0) | 2022.10.12 |
[Unity] TextMesh Pro에서 겹친 텍스트 아웃라인 표시 (0) | 2022.10.04 |
댓글