본문 바로가기
Project/멘토링(ColorBlind)

Perimission 부여하기

by 김마리님 2022. 5. 8.

해당 프로젝트에서 필요한 최소한의 권한은 크게 두 가지 입니다.

1. 카메라 사용

2. 외부 저장공간(갤러리) 읽기 / 쓰기

 

해당 권한을 부여받는 방법입니다.

 

먼저 AndroidManifest.xml 에 부여받을 권한을 기재합니다.

 

- AndroidManifest.xml

    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

 

그리고 PermissionUtil을 작성해줍니다.

(유틸을 작성하는 이유는 각 기능을 달리하는 매서드들을 객체화 하기 위해 떨어뜨려 놓는 것입니다.)

(임포트 할때 다른 자바 파일을 임포트하지 않도록 임포트해야할 라이브러리도 함께 써드릴게요. 혹시 자동완성에 뜨지 않는다면 다른 라이브러리가 임포트 됐는지 확인 해보시길 바래요~)

 

 

- colorblindcameraex/util/PermissionUtil.java

import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;

import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;

import java.util.List;

public class PermissionUtil {

    private static final String TAG = "PermissionUtil";

    /**
     * permissionList로 들어온 퍼미션 목록이 승인된 퍼미션인지 확인합니다.
     * 하나라도 승인되지 않은 퍼미션이 있을 경우 false를 리턴합니다.
     */
    public static boolean checkPermission(Context context, List<String> permissionList) {
        for (int i=0; i <permissionList.size(); i++) {
            if(ContextCompat.checkSelfPermission(context, permissionList.get(i)) == PackageManager.PERMISSION_DENIED) {
                DebugLogUtil.logD(TAG,permissionList.get(i) + " denied");
                return false;
            }
        }

        return true;
    }

    /**
     * permissionList로 들어온 퍼미션 목록을 승인시도 합니다.
     */
    public static void requestPermission(Activity activity, List<String> permissionList) {

        //ActivityCompat.requestPermissions는 반드시 String[]자료형을 요구합니다.
        //따라서, List<String>자료형을 String[] 자료형으로 변경해주는 작업이 필요합니다.

        String[] permissionArray = new String[permissionList.size()];

        for (int i = 0; i < permissionList.size(); i ++) {
            permissionArray[i] = permissionList.get(i);
            DebugLogUtil.logD(TAG, permissionArray[i]);

        }

        ActivityCompat.requestPermissions(activity, permissionArray, 10);
    }
}

 

 

이제 승인받을 목록을 작성해볼텐데요.

저는 이런 방식(String 형식의 필요한 데이터를 따로 저장해놓는 방식)이 익숙해서 해당 방식으로 쓰는데, 만일 이 방식이 익숙하지 않으시다면 Array에 넣을때 바로 Manifest.permission.-  으로 넣으셔도 무방합니다~

 

- colorblindcameraex/constant/Constant.java

    //퍼미션 관련 String
    public static final String manifest_permission_camera  = Manifest.permission.CAMERA;
    public static final String manifest_permission_read_external_storage  = Manifest.permission.READ_EXTERNAL_STORAGE;
    public static final String manifest_permission_write_external_storage = Manifest.permission.WRITE_EXTERNAL_STORAGE;

 

 

이제 메인에서 해당 퍼미션을 요청해봅니다.

(이 코드들은 반드시 onCreate 안에 넣도록 합니다. 안드로이드의 특성상 onCreate 되면서 뷰가 그려져야하기 때문입니다.)

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //퍼미션 추가
        List<String> permissionList = new ArrayList<>();
        permissionList.add(Constant.manifest_permission_camera);
        permissionList.add(Constant.manifest_permission_read_external_storage);
        permissionList.add(Constant.manifest_permission_write_external_storage);

        if (!PermissionUtil.checkPermission(this, permissionList)) {
            PermissionUtil.requestPermission(this, permissionList);
        }

퍼미션 유틸의 checkPermission은 List의 퍼미션 요청 중 하나라도 거부되어 있으면 false를 반납합니다.

그래서 if문을 사용해 false일 경우 PermissionUtil 파일의 requestPermission 매서드(권한을 요청하는 매서드)를 호출하여 퍼미션을 부여받도록 합니다.

 

 

 

만약 위의 Constant 파일을 따로 떼놓지 않으시려면 다음과 같은 방법으로 쓸 수도 있어요

        //퍼미션 추가
        List<String> permissionList = new ArrayList<>();
        permissionList.add(Manifest.permission.CAMERA);
        permissionList.add(Manifest.permission.READ_EXTERNAL_STORAGE);
        permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);

 


이렇게 요청하면 짠. 이렇게 권한 요청을 할 수 있게 됩니다 :)

 

반응형