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(this, new 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/
'Android' 카테고리의 다른 글
프래그먼트 (Fragment) - 2. java 소스코드에 프래그먼트 추가하기 (0) | 2018.06.29 |
---|---|
프래그먼트 (Fragment) - 1. XML 레이아웃에 프래그먼트 추가하기 (0) | 2018.05.30 |
Broadcast Receiver (브로드캐스트 수신자) (0) | 2018.05.26 |
액티비티 구성요소 - 서비스 (Service) (0) | 2018.05.19 |
액티비티 수명주기 (Activity Lifecycle) - (2) (0) | 2018.05.19 |