티스토리 뷰
퍼미션 체크 부분을 만들기 위해서,
UniAndroid Permission 깃허브 : https://github.com/sanukin39/UniAndroidPermission
이 링크를 참조해서, 만들려고 했었다.
일단 예제를 다운받고, 코드들을 하나하나 천천히 보고 빌드도 해보면서 사용을 해봤다.
그리고, 직접 만든 안드로이드 플러그인이 있기 때문에, 그 안에 퍼미션 체크하는 부분을 만들고, 매니페스트도 고친 다음 실행을 해봤다.
하지만 OnAllow와 OnDeny같은, 함수가 실행이 되지 않아서, 한 2시간을 뭐가 틀렸는가를 살펴봤지만 틀린 것은 하나도 없었다.
퍼미션에 관련된 것은 나오기 때문에.. 그래서, 백업을 해놓고, 다시 프로젝트에, 저 UniAndroid도 넣어서 실행해보았지만, 똑같은 결과였다.
그래서 결론 낸것은, Vuforia에서도 Permission 확인하는, UnityPlayer.currentActivity.requestPermissions 라는 메서드를 사용하는 것 같았다.
그 부분이 LogCat에서 IllegalStateException이 뜨고, at com.vuforia.ar.pl.PermissionHandler.requestPermissions 이런 에러에 대한 로그캣도 뜨는 것을 확인할 수 있었다.
IllegalStateException이 뜨는 이유는, 인스턴스(instance) 상태에서 올바르게 재생성하려면 공용 정적 클래스여야 합니다. 라고
번역이 되었다. instance 싱글톤 패턴? 올바르게 재생성하려면 공용 정적 클래스라면, 싱글톤 패턴을 말하는 것 같은데.. 이게 뭔 상관인 지 참...
싱글톤 패턴으로 만들어서도 사용해보았지만 같은 오류만 발생했다. 역시 vuforia는 이슈 잡기에도 바쁠 것 같다.
그래서, 난 어떻게 해결했는가 하면,
내가 사용하고 있는 퍼미션은 총 3가지이다. 폴더 접근과 카메라 접근 그리고 오디오 접근.
그리고, 저 예제를 보면 알겠지만, SampleScript에서 나와있는 방식으로 하되, if문을 이용해서, Permission 체크가 다 되었는 지 안되었는 지를 체크했다.
if문을 처음에 시작할 땐, 폴더 접근 퍼미션이 허용이 되었는 지를 상태값을 받아오면 안될 것이다.
이런식으로 말이다.
if(A.Permission(Permission.WRITE_EXTERNAL_STORAGE))
{
}
이렇게 작성을 해버리면, 폴더접근을 만약 허용해줬다고 생각해보자. 그럼 무조건 참이 되기 때문에, 그 안에 코드만 실행하게 될 것이다.
그렇기 때문에, 난 if문을 처음 작성할 때
3개의 조건이 맞는 지를 확인하고, 그 다음은 else if로 해서, 2개의 조건이 맞는 지를 확인하고 그 다음은, 폴더 접근에 대한 부분
이 마저도 아니라면, else문안에, 카메라 접근 권한 허용에 대한 부분의 다이얼로그를 띄워달라고 보냈다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | public void RequestPermission() { if (PermissionManager.isPermitted(AndroidPermission.WRITE_EXTERNAL_STORAGE) && PermissionManager.isPermitted(AndroidPermission.CAMERA) && PermissionManager.isPermitted(AndroidPermission.RECORD_AUDIO)) { SystemManager.Instance.ApplicationRestartDialog(); } else if (PermissionManager.isPermitted(AndroidPermission.WRITE_EXTERNAL_STORAGE) && PermissionManager.isPermitted(AndroidPermission.CAMERA)) { PermissionManager.RequestPermission(AndroidPermission.RECORD_AUDIO, OnAllow, OnDeny, OnDenyAndNeverAskAgain); buttonText.text = "시작하기"; } else if (PermissionManager.isPermitted(AndroidPermission.WRITE_EXTERNAL_STORAGE)) { PermissionManager.RequestPermission(AndroidPermission.CAMERA, OnAllow, OnDeny, OnDenyAndNeverAskAgain); buttonText.text = "오디오 접근 권한 허용하기"; } else { PermissionManager.RequestPermission(AndroidPermission.WRITE_EXTERNAL_STORAGE, OnAllow, OnDeny, OnDenyAndNeverAskAgain); buttonText.text = "카메라 접근 권한 허용하기"; } } |
이런식으로 말이다.
만약에 접근 권한이 모두 허용이 되었다면, 난 다이얼로그에서 예를 누르면 종료를 시키는 다이얼로그를 만들어서, 출력했다.
왜냐하면, 다이얼로그 없이 AR씬으로 넘어가게 되면, 아까 vuforia랑 충돌한 것 때문에, AR카메라가 작동이 안되는 문제가 발생되었었다.
그래서, 앱을 다시 실행시켜달라는 다이얼로그를 만들어서, 다시 실행하게 되면, 뷰포리아 카메라는 잘 작동이 된다.
퍼미션 체크에 대해서도 글을 한번 쓸 예정이기 때문에, 급한 사람들은, 맨 위에 링크에서 예제를 다운받아서 실행해보는 것을 추천하고
아직 학생 또는 배워야 할 사람들은 글이 올라오면 보고선 이해하길 바란다고 말하고 싶다.
주저리 주저리 적었는데.. 나도 왜 이런 오류가 나는 지는 잘 모르기 때문에.. 해결할 방법도 없는 것 같고 그래서 혹시 나와 같은 이유로 고생중인 사람들이 있다면
퍼미션 체크를 안하거나 이 방법을 사용하길 바란다.
- 이 글에 도움이 되셨다면, 공감(♡) 버튼과 댓글 부탁드리겠습니다. -
'게임 프로그래밍 ( 이제 안함 ) > AR & VR' 카테고리의 다른 글
AR - Wikitude 카메라 셋팅 컨트롤 ( Camera Setting Control ) (0) | 2019.02.16 |
---|---|
AR - Vuforia Image target 이름이 -Default로 변하는 현상 (0) | 2018.11.26 |
AR - Vuforia imagetarget 동적할당. (0) | 2018.09.17 |
AR - Vuforia 카메라 문제 ( iOS ) (0) | 2018.08.17 |
AR - 뷰포리아 카메라 앞/뒤 전환, 미러기능 (0) | 2018.07.31 |
- Total
- Today
- Yesterday
- 유니티3D
- 유니티
- CSS
- baseofcoding
- c#
- 서블릿
- 뷰포리아
- GitHub
- Base Of Coding
- Git
- spring boot
- Controller
- Spring
- Unity
- 비지니스 로직
- VR
- JSP
- 게임프로그래밍
- 안드로이드
- 유니티로 배우는 C#
- unity3d
- Vuforia
- 프로그래밍
- 스프링
- Servlet
- Java
- Next.js
- MVC
- 프리젠테이션 로직
- HTML
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |