Permission

장시영·2022년 6월 2일

* TedPermission 라이브러리 사용

  1. 라이브러리 추가
implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
  1. Manifest 추가(permission)
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_SETTINGS"
                 tools:ignore="ProtectedPermissions" />
  1. Listener 추가
PermissionListener permissionlistener = new PermissionListener() {
        @SuppressLint("NewApi")
        @Override
        public void onPermissionGranted() {
            if (!Settings.System.canWrite(MainActivity.this)) {
                permissionForWRITE_SETTINGS();
            }
            Toast.makeText(MainActivity.this, "Permission 허용시", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPermissionDenied(List<String> deniedPermissions) {
            Toast.makeText(MainActivity.this, "Permission 허용 안할 시\n" + deniedPermissions.toString(), Toast.LENGTH_SHORT).show();
        }
    };
  1. TedPermission 만들기
TedPermission.create()
                .setPermissionListener(permissionlistener)
                .setDeniedMessage("If you reject permission, you can not use this service\n\nPlease turn on permissions at [Setting] > [Permission]")
                .setPermissions(Manifest.permission.WRITE_CONTACTS, Manifest.permission.READ_CONTACTS, Manifest.permission.WRITE_EXTERNAL_STORAGE)
                .check();

WRITE_CONTACTS : 연락처 접근 권한 , READ_CONTACTS : 연락처 접근 권한 , WRITE_EXTERNAL_STORAGE : 사진, 미디어, 파일에 접근하는 권한

* 권한 유형 확인

ContextCompat.checkSelfPermission(context, Manifest.permission);

*ContextCompat : Permission 확인할 때 SDK 버전을 고려하지 않아도 되도록 처리해둔 클래스 (내부적으로 SDK 버전 처리)

*checkSelfPermission() :

*권한유형 : (런타임권한, 특별권한 ...)

* WRITE_SETTINGS 권한 허가하는 법

1) manifest

<uses-permission android:name="android.permission.WRITE_SETTINGS"
        tools:ignore="ProtectedPermissions" />

2) WRITE_SETTING 가능 여부 확인

 if (!Settings.System.canWrite(MainActivity.this)) {
//                permissionForWRITE_SETTINGS();
//                defaultRingtoneSet();
            }

3) 권한 설정 창 띄워주기

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_SETTINGS) != 0) {
            Intent intent = new Intent("android.settings.action.MANAGE_WRITE_SETTINGS"); // WRITE_SETTINGS 권한을 직접 설정하는 창을 띄워줌
            StringBuilder stringBuilder = new StringBuilder();
            stringBuilder.append("package:");
            stringBuilder.append(getPackageName());
            intent.setData(Uri.parse(stringBuilder.toString()));
            startActivityForResult(intent, REQUEST_FOR_WRITE_SETTINGS);
            return;
        }
profile
코딩주니어

0개의 댓글