관리 메뉴

Bbaktaeho

[Android] 권한의 유형과 권한 명세하기 (permission, AndroidManifest) 본문

개발 (Develop)/안드로이드 (Android)

[Android] 권한의 유형과 권한 명세하기 (permission, AndroidManifest)

Bbaktaeho 2020. 9. 4. 12:43
반응형

안드로이드 권한 (Permission)


출처 https://developer.android.com/guide/topics/permissions/overview?hl=ko

안드로이드 앱이 동작하면서 시스템의 특정 부분을 사용하려면 안드로이드로부터 권한을 위임받아야 합니다.

 

사용하려는 권한이 개인정보를 요청한다면 위험 권한으로 분류되고 그렇지 않은 권한은 일반 권한으로 분류됩니다. 위험 권한은 카메라, 위치 정보, 주소록 등이 있고, 일반 권한으로는 인터넷 접근 권한, 와이파이 접근 권한, 블루투스 접근 권한 등이 있습니다.

마지막으로 서명 권한이 있는데, 이 권한을 사용하려는 앱이 권한을 정의하는 앱과 동일한 인증서로 서명된 경우 자동으로 권한을 부여합니다.

일반 권한 (Normal Permission)


AndroidManifest.xml 파일에 <uses-permission /> 태그를 사용하여 권한을 입력하면 됩니다.

앱 설치 시 사용자에게 권한 승인을 묻는 팝업창을 띄워줍니다.

권한 내용
INTERNET 인터넷 사용 권한
BLUETOOTH 블루투스 상태 확인
VIBRATE 진동 설정 권한
SET_ALARM 알람 설정 권한
ACCESS_WIFI_STATE 와이파이 상태 확인
등등... ...

인터넷 권한 사용

AndroidManifest.xml

위험 권한 (Dangerous Permission)


위험 권한은 사용자의 개인정보, 다은 앱 및 기기의 작동에 영향을 줄 우려가 있는 권한입니다. 

위험 권한은 사용자의 동의가 필요하므로 런타임 시 팝업창으로 동의를 받습니다. 단, 안드로이드 6 버전 이상부터 가능합니다. 

https://bbaktaeho-95.tistory.com/51

 

[Android] 안드로이드 버전의 변천사 (디저트, Android 10)

10년 차 안드로이드 사용자 제 기억으론 프로요(Froyo) 부터 사용했던 것 같습니다. 첫 스마트폰이 LG의 옵티머스 빅이었는데 이때 빅뱅 이 광고했었고 그 시절 가장 큰 디스플레이인 4.3inch 로 알고

bbaktaeho-95.tistory.com

6 버전 이면 API 레벨 23 이상으로 타깃을 잡아야지만 정상으로 동작합니다.

일반 권한처럼 AndroidManifest.xml 에 권한을 설정하지만 부가적인 코드 작성이 필요합니다.

권한 그룹

어떠한 파일에 읽기 또는 쓰기 권한이 있으면 이 권한들은 하나의 그룹으로 볼 수 있습니다.

같은 그룹에서 다른 권한이 이미 부여된 경우, 그룹에 속해있는 권한들까지 모두 허가합니다.

권한 그룹 권한 내용
CAMERA CAMERA 카메라 권한
CONTACTS READ_CONTACTS 주소록 읽기
WRITE_CONTACTS 주소록 쓰기
LOCATION ACCESS_FINE_LOCATION 위치 정보 사용
ACCESS_COARSE_LOCATION 위치 정보 사용
CALENDAR READ_CALENDAR 캘린더 읽기
WRITE_CALENDAR 캘린더 쓰기
등등... ... ...

카메라 권한 사용

AndroidManifest.xml

추가 로직 필요

public class MainActivity extends AppCompatActivity {

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

        Button button = findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                checkPermission();
            }
        });

    }

    void checkPermission() {
        int cameraPermission = ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);
        if(cameraPermission == PackageManager.PERMISSION_GRANTED) {
            // 카메라 실행 로직
            logic();
        }else {
            requestPermission();
        }
    }

    void requestPermission() {
        String[] permissions = {Manifest.permission.CAMERA};
        ActivityCompat.requestPermissions(this, permissions, 321);
    }

    void logic() {
        Toast.makeText(this, "카메라 실행", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        if (requestCode == 321) {
            if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                // 카메라 실행 로직
                logic();
            }else {
                finish();
            }
        }
    }
}

버튼 클릭 시 팝업창

참고 자료


https://developer.android.com/guide/topics/permissions/overview?hl=ko

 

권한 개요  |  Android 개발자  |  Android Developers

권한의 목적은 Android 사용자의 개인정보를 보호하는 것입니다. Android 앱에서는 민감한 사용자 데이터(예: 연락처, SMS) 및 특정 시스템 기능(예: 카메라, 인터넷)에 액세스할 수 있는 권한을 요청��

developer.android.com

반응형