티스토리 뷰

반응형



퍼미션 체크 부분을 만들기 위해서,


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카메라가 작동이 안되는 문제가 발생되었었다.


그래서, 앱을 다시 실행시켜달라는 다이얼로그를 만들어서, 다시 실행하게 되면, 뷰포리아 카메라는 잘 작동이 된다.


퍼미션 체크에 대해서도 글을 한번 쓸 예정이기 때문에, 급한 사람들은, 맨 위에 링크에서 예제를 다운받아서 실행해보는 것을 추천하고


아직 학생 또는 배워야 할 사람들은 글이 올라오면 보고선 이해하길 바란다고 말하고 싶다.


주저리 주저리 적었는데.. 나도 왜 이런 오류가 나는 지는 잘 모르기 때문에.. 해결할 방법도 없는 것 같고 그래서 혹시 나와 같은 이유로 고생중인 사람들이 있다면


퍼미션 체크를 안하거나 이 방법을 사용하길 바란다.


- 이 글에 도움이 되셨다면, 공감(♡) 버튼과 댓글 부탁드리겠습니다. - 



반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
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
글 보관함