투케이2K

10. (TWOK/ERROR) [Android] ted 테드 퍼미션 사용 시 특정 디바이스 (갤럭시 s8) 등에서 앱이 중단되는 이슈 본문

투케이2K 에러관리

10. (TWOK/ERROR) [Android] ted 테드 퍼미션 사용 시 특정 디바이스 (갤럭시 s8) 등에서 앱이 중단되는 이슈

투케이2K 2022. 4. 9. 17:26

[환경 설정 및 설명]

프로그램 : AndroidStudio

설 명 : ted 테드 퍼미션 사용 시 특정 디바이스 (갤럭시 s8) 등에서 앱이 중단되는 이슈

 

[에러 원인]

1. 구글 플레이스토어 특정 버전 이상 (Oreo 8.0) 발생하는 문제로 기존 테드 퍼미션 의존성과 호환성이 맞지 않는 이슈

 

[해결 방법]

1. 테트 퍼미션 의존성 버전 업데이트 수행 및 코드 재작성 실시 (Build.gradle , Java 파일)

    // [테드 퍼미션 : 다중 퍼미션 체크 라이브러리]
    implementation 'gun0912.ted:tedpermission:2.2.2'

 

    // TODO [퍼미션 체크 메소드]
    public static Context context;
    public static void checkPermission(Context mContext) {
        context = mContext;
        try {
            Log.i("---","---");
            Log.d("//===========//","================================================");
            Log.i("","\n"+"[C_Permission >> checkPermission() :: 퍼미션 부여 확인 실행]");
            Log.d("//===========//","================================================");
            Log.i("---","---");

            TedPermission.with(mContext)
                    .setPermissionListener(permissionlistener) // [퍼미션이 부여 체크 이벤트 리스너 지정]

                    // TODO [AndroidManifest.xml 에 등록된 퍼미션 등록]
                    .setPermissions(
                            // -----------------------------------------
                            // [휴대폰 상태 체크]
                            Manifest.permission.READ_PHONE_STATE,
                            // -----------------------------------------
                            // [블루투스 권한]
                            Manifest.permission.BLUETOOTH,
                            Manifest.permission.BLUETOOTH_ADMIN,
                            // -----------------------------------------
                            // [위치 권한]
                            Manifest.permission.ACCESS_COARSE_LOCATION,
                            Manifest.permission.ACCESS_FINE_LOCATION,
                            // -----------------------------------------
                            // [저장소 권한 : application >> android:requestLegacyExternalStorage="true" 등록 필요]
                            Manifest.permission.WRITE_EXTERNAL_STORAGE,
                            Manifest.permission.READ_EXTERNAL_STORAGE,
                            // -----------------------------------------
                            // [카메라 권한]
                            Manifest.permission.CAMERA
                            // -----------------------------------------
                    )
                    .check();
        }
        catch (Exception e){
            e.printStackTrace();
        }
    }
    // TODO [퍼미션이 부여 되었는지 확인 메소드]
    static PermissionListener permissionlistener = new PermissionListener() {
        @Override
        public void onPermissionGranted() {
            Log.i("---","---");
            Log.w("//===========//","================================================");
            Log.i("","\n"+"[C_Permission >> checkPermission() :: 전체 퍼미션 부여 확인 성공]");
            Log.w("//===========//","================================================");
            Log.i("---","---");
            // -----------------------------------------
            // [QueryAllPackagesPermission 권한 부여 확인 >> 사용자 모바일 접근성 권한 체크]
            checkQueryAllPackages(context);
            // -----------------------------------------
        }
        @Override
        public void onPermissionDenied(List<String> deniedPermissions) {
            Log.i("---","---");
            Log.e("//===========//","================================================");
            Log.i("","\n"+"[C_Permission >> checkPermission() :: 전체 퍼미션 부여 확인 실패]");
            Log.i("","\n"+"[거부된 권한 :: "+String.valueOf(deniedPermissions.toString())+"]");
            Log.e("//===========//","================================================");
            Log.i("---","---");
            // -----------------------------------------
            // [연속적으로 퍼미션을 허용 받기위해 재귀함수 루틴 사용]
            // checkPermission();
            // -----------------------------------------
            // [Alert 팝업창 알림 실시]
            getAlertDialog(
                    context,
                    0, // [설정창 이동 타입 지정]
                    AL_TITLE,
                    AL_NPA,
                    AL_SET,
                    AL_NO,
                    "");
            // -----------------------------------------

        }
    };

 

반응형
Comments