1. 위험권한 (Dangerous Permission)

마시멜로우 버전(22)부터 권한을 일반 권한(Normal Permission)과 위험 권한(Dangerous Permission)으로 나누었다.

위험 권한은 앱이 실행된 후에 사용자에게 권한 허용을 요청해야 한다.



2. 위험 권한의 종류

위험 권한은 개인정보가 담겨있는 정보에 접근하는 경우에 대부분 부여된다.

 권한 이름

세부 권한 

 LOCATION

ACCESS_FINE_LOCATION

ACCESS_COARSE_LOCATION 

 CAMERA

CAMERA 

 MICROPHONE

 RECORD_AUDIO

CONTACTS 

 READ_CONTACTS

WRITE_CONTACTS

GET_ACCOUNTS

PHONE 

READ_PHONE_STATE

CALL_PHONE

READ_CALL_LOG

WRITE_CALL_LOG

ADD_VOICEMAIL

USE_SIP

PROCESS_OUTGOING_CALLS 

SMS 

 SEND_SMS

RECEIVE_SMS

READ_SMS

RECEIVE_WAP_PUSH

RECEIVE_MMS

CALENDAR 

 READ_CALENDAR

WRITE_CALENDAR

SENSORS 

BODY_SENSORS 

STORAGE

READ_EXTERNAL_STORAGE

WRITE_EXTERNAL_STORAGE 



3. 위험 권한 부여

app 수준의 build.gradle 파일에서 targetSdkVersion 값을 23 미만으로 설정하면 위험 권한도 자동으로 부여된다.

그러나 필요 시에 직접 코드에서 앱 실행 시에 위험 권한을 부여해야 한다.


실행 결과 화면

  


app/build.gradle

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ndroid {
    compileSdkVersion 26
    defaultConfig {
        applicationId "com.tistory.qlyh8.pracitice"
        minSdkVersion 15
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }
    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }
}
cs



AndroidManifest.xml

1
2
3
4
5
6
7
8
9
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.tistory.qlyh8.pracitice">
 
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
cs



MainActivity.java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.tistory.qlyh8.pracitice;
 
import android.Manifest;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.widget.Toast;
 
public class MainActivity extends AppCompatActivity {
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_sms);
 
        // "RECEIVE_SMS" 권한 있는지 체크
        int permissionCheck = ContextCompat.checkSelfPermission(this, Manifest.permission.RECEIVE_SMS);
 
        if (permissionCheck == PackageManager.PERMISSION_GRANTED) { // 권한이 주어짐
            Toast.makeText(this"SMS 수신 권한 있음.", Toast.LENGTH_LONG).show();
        }
        else {  // 권한이 주어지지 않음. permissionCheck == PackageManager.PERMISSION_DENIED
            Toast.makeText(this"SMS 수신 권한 없음.", Toast.LENGTH_LONG).show();
 
            // 권한에 대해 설명이 필요한지 체크
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECEIVE_SMS)) {
                Toast.makeText(this"SMS 권한 설명 필요함.", Toast.LENGTH_LONG).show();
            } else {
                // 권한 부여. 시스템에서 띄어 주기 때문에 시스템쪽으로 요청한다. requestCode 는 임의로 지정험
                ActivityCompat.requestPermissions(thisnew String[] {Manifest.permission.RECEIVE_SMS}, 1);
            }
        }
    }
 
    // 시스템이 권한 부여 과정을 마치고 이를 확인하기 위한 콜백 함수
    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        switch (requestCode){
            case 1:
                if(grantResults.length > 0){
                    if(grantResults[0== PackageManager.PERMISSION_GRANTED)
                        Toast.makeText(this"SMS 수신 권한을 사용자가 승인함.", Toast.LENGTH_LONG).show();
                    else if(grantResults[0== PackageManager.PERMISSION_DENIED)
                        Toast.makeText(this"SMS 수신 권한을 사용자가 거부함.", Toast.LENGTH_LONG).show();
                }
                else {
                    Toast.makeText(this"SMS 수신 권한을 부여받지 못함.", Toast.LENGTH_LONG).show();
                }
                break;
            default:
                break;
        }
    }
}
cs





출처: https://www.edwith.org/boostcourse-android/lecture/22591/

+ Recent posts