투케이2K

37. (TWOK/LOGIC) [Android] 마스터 관리자 앱 제작 시 로그인 수행 시 필요 초기 퍼미션 권한 요청 로직 본문

투케이2K 로직정리

37. (TWOK/LOGIC) [Android] 마스터 관리자 앱 제작 시 로그인 수행 시 필요 초기 퍼미션 권한 요청 로직

투케이2K 2023. 11. 9. 20:29

[로직 정리]

정리 로직 : Android

상태 : [Android] 마스터 관리자 앱 제작 시 로그인 수행 시 필요 초기 퍼미션 권한 요청 로직

 

[설 명]

 

[1] : 로그인 화면 접속 시 >> checkSelfPermission 을 사용해서 요청 할 수 있는 권한 요청 수행


[2] : 로그인 화면 버튼 클릭 이벤트 발생 >> 시스템적으로 추가로 부여할 권한 체크 (ex : 파일 액세스, 절전 모드 제외)


[3] : 시스템적으로 [필요] 권한이 부여되어 있지 않은 경우 >> 관리자 앱은 모든 권한 부여가 필요합니다. [필요] 권한을 모두 설정해주세요. [팝업창] 표시


[4] : [리스트 팝업창] 에서 특정 [필요] 권한 인덱스 클릭 시 >> 시스템 권한 부여 설정 창 Intent 이동 수행


[5] : 예시 소스 코드 첨부

                    // ----------------------------------------------------------------
                    String errorMessage = "";
                    // ----------------------------------------------------------------
                    String permissionArray [] = new String[5];
                    // ----------------------------------------------------------------
                    if (C_Permission.getFileAccessPermisseionEnable(LoginActivity.this) == true) { // TODO [파일 액세스] : [정상 부여]
                        permissionArray[0] = "[정상] : 파일 액세스 권한";
                    }
                    else {
                        permissionArray[0] = "[필요] : 파일 액세스 권한";
                        errorMessage += " [파일 액세스 권한 : NO] ";
                    }
                    // ----------------------------------------------------------------
                    if (C_Permission.getAppInstallPermisseionEnable(LoginActivity.this) == true) { // TODO [특정 앱 설치] : [정상 부여]
                        permissionArray[1] = "[정상] : 앱 설치 권한";
                    }
                    else {
                        permissionArray[1] = "[필요] : 앱 설치 권한";
                        errorMessage += " [앱 설치 권한 : NO] ";
                    }
                    // ----------------------------------------------------------------
                    if (C_Permission.checkQueryAllPackages(LoginActivity.this) == true) { // TODO [QUERY_ALL_PACKAGES] : [정상 부여]
                        permissionArray[2] = "[정상] : 패키지 접근 권한";
                    }
                    else {
                        permissionArray[2] = "[필요] : 패키지 접근 권한";
                        errorMessage += " [패키지 접근 권한 : NO] ";
                    }
                    // ----------------------------------------------------------------
                    if (C_App.getAppWhiteListReg(LoginActivity.this) == true){ // TODO [앱 화이트 리스트 등록] : [정상 부여]
                        permissionArray[3] = "[정상] : 앱 화이트 리스트 등록";
                    }
                    else {
                        permissionArray[3] = "[필요] : 앱 화이트 리스트 등록";
                        errorMessage += " [앱 화이트 리스트 등록 : NO] ";
                    }
                    // ----------------------------------------------------------------
                    if (C_StateCheck.getGpsEnable(LoginActivity.this) == true) { // TODO [GPS 권한 체크] : [정상 부여]
                        permissionArray[4] = "[정상] : GPS 위치 권한";
                    }
                    else {
                        permissionArray[4] = "[필요] : GPS 위치 권한";
                        errorMessage += " [GPS 위치 권한 : NO] ";
                    }
                    // ----------------------------------------------------------------

                    // [에러 메시지 널 체크]
                    if (C_Util.stringNotNull(errorMessage) == true){

                        // [에러 팝업창 알림]
                        C_Ui_View.observablePermissionListView(LoginActivity.this, "알 림", permissionArray, "닫기")
                                .subscribeOn(AndroidSchedulers.mainThread()) // [Observable (생성자) 로직을 IO 스레드에서 실행 : 백그라운드]
                                .observeOn(Schedulers.io()) // [Observer (관찰자) 로직을 메인 스레드에서 실행]
                                .subscribe(new Observer<Integer>() { // [Observable.create 타입 지정]
                                    @Override
                                    public void onSubscribe(@NonNull Disposable d) {
                                    }
                                    @Override
                                    public void onNext(@NonNull Integer value) {
                                        S_Log.ltw("================================================");
                                        S_Log.cnt("["+ACTIVITY_NAME+" >> 퍼미션 리스트 팝업창 활성 :: onNext]");
                                        S_Log.cnt("-----------------------------------------");
                                        S_Log.cnt("[VALUE :: "+String.valueOf(value)+"]");
                                        S_Log.lbw("================================================");
                                    }
                                    @Override
                                    public void onError(@NonNull Throwable e) {
                                        S_Log.lte("================================================");
                                        S_Log.cnt("["+ACTIVITY_NAME+" >> 퍼미션 리스트 팝업창 활성 :: onError]");
                                        S_Log.cnt("-----------------------------------------");
                                        S_Log.cnt("[ERROR :: "+String.valueOf(e.getMessage())+"]");
                                        S_Log.lbe("================================================");
                                    }
                                    @Override
                                    public void onComplete() {
                                    }
                                });

                    }

                    // ----------------------------------------------------------------

 

반응형
Comments