안녕하세요
안드로이드 스튜디오를 개발하다보면 안드로이드에서 특정 권한을 획득해야 동작이 가능한 기능들이 있습니다
안드로이드 마쉬멜로우 이전 버전에서는 코드상에 권한허가를 넣어주면 이런 권한이 획득이 가능했는데 마쉬멜로우 버전 이후부터는 사용자가 직접 권한을 허락해야 사용이 가능하도록 바뀌었습니다
안드로이드 스튜디오에서 권한을 획득하는 방법에 대해서 알아보겠습니다!
안드로이드 권한 종류
안드로이드의 권한의 종류입니다
해당 기능들을 동작하는 경우 권한을 획득하지 않으면 에러메시지가 뜨면서 동작을 수행하지 않습니다
출처 참고 : 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();
}
}
}
}
결과 화면
아래처럼 앱을 실행하면 권한을 물어봅니다!!
여기까지 안드로이드 스튜디오의 권한을 얻는 방법에 대해서 알아봤습니다!
안드로이드 개발하는 분들에게 제 포스팅이 도움이 되었으면 좋겠습니다
'프로그래밍 > 안드로이드' 카테고리의 다른 글
[Android Studio] android.content.ActivityNotFoundException: Unable to find explicit activity class 에러해결방법 (2) | 2021.05.07 |
---|---|
[Android Studio] 내부저장소/외부저장소 절대경로 가져오기 (1) | 2021.05.06 |
[Android Studio] 현재 시간 가져오기 (0) | 2021.05.06 |
[Android Studio] 신규 프로젝트 만들기 (0) | 2021.05.05 |
[Android Studio] 구 버전 다운로드 받는 방법 (0) | 2021.05.01 |