loading

프로그래밍/안드로이드

[Android Studio] 권한(Permission) 얻기

침착곰 2021. 5. 6. 15:38
반응형

안녕하세요

안드로이드 스튜디오를 개발하다보면 안드로이드에서 특정 권한을 획득해야 동작이 가능한 기능들이 있습니다

안드로이드 마쉬멜로우 이전 버전에서는 코드상에 권한허가를 넣어주면 이런 권한이 획득이 가능했는데 마쉬멜로우 버전 이후부터는 사용자가 직접 권한을 허락해야 사용이 가능하도록 바뀌었습니다

안드로이드 스튜디오에서 권한을 획득하는 방법에 대해서 알아보겠습니다!

 


안드로이드 권한 종류

안드로이드의 권한의 종류입니다

해당 기능들을 동작하는 경우 권한을 획득하지 않으면 에러메시지가 뜨면서 동작을 수행하지 않습니다

출처 참고 : https://developer.android.com/guide/topics/security/permissions#normal-dangerous

Permission Group

Permissions
CALENDAR
CAMERA
CONTACTS
LOCATION
MICROPHONE
PHONE
SENSORS
SMS
STORAGE

 


개발 코드

권한 추가(AndroidManifest.xml)

아래코드 Manifest에

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

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

를 추가하여 저장소 읽기/쓰기 권한을 추가합니다

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.permission">
 
    <!-- 권한 추가 -->
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.Permission">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest>
cs

 


권한 얻기(MainActivity.java)

권한을 얻는 전체 소스입니다

저장소 읽기, 쓰기 권한이 있는지 체크하여 없다면 사용자에게 권한을 허용할 지 물어봅니다

권한이 없다면 앱을 종료시켜버립니다

package com.example.permission;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.content.ContextCompat;

import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;

public class MainActivity extends AppCompatActivity {

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

        // 권한ID를 가져옵니다
        int permission = ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_EXTERNAL_STORAGE);

        int permission2 = ContextCompat.checkSelfPermission(this,
                Manifest.permission.READ_EXTERNAL_STORAGE);

        // 권한이 열려있는지 확인
        if (permission == PackageManager.PERMISSION_DENIED || permission2 == PackageManager.PERMISSION_DENIED) {
            // 마쉬멜로우 이상버전부터 권한을 물어본다
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                // 권한 체크(READ_PHONE_STATE의 requestCode를 1000으로 세팅
                requestPermissions(
                        new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.READ_EXTERNAL_STORAGE},
                        1000);
            }
            return;
        }
    }

    // 권한 체크 이후로직
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grandResults) {
        // READ_PHONE_STATE의 권한 체크 결과를 불러온다
        if(requestCode == 1000) {
            boolean check_result = true;

            // 모든 퍼미션을 허용했는지 체크
            for (int result : grandResults) {
                if (result != PackageManager.PERMISSION_GRANTED) {
                    check_result = false;
                    break;
                }
            }

            // 권한 체크에 동의를 하지 않으면 안드로이드 종료
            if(check_result == true) {

            }
            else {
                finish();
            }
        }
    }
}

 


결과 화면

아래처럼 앱을 실행하면 권한을 물어봅니다!!

 

여기까지 안드로이드 스튜디오의 권한을 얻는 방법에 대해서 알아봤습니다!

안드로이드 개발하는 분들에게 제 포스팅이 도움이 되었으면 좋겠습니다

반응형
그리드형