본문 바로가기
2022년

권한

by 박상윤 2021. 10. 18.

- 안드로이드는 개인 정보, 센서, 카메라, 저장소 등 개인 정보와 관련된 기능을 사용하기 위해서는 권한을 등록해야 한다.

- 권한 등록은 사용자가 애플리케이션을 다운로드 받거나 설치 후 애플리케이션 정보에서 확인이 가능하다.

- 권한 등록의 목적은 사용자에게 애플리케이션이 어떠한 기능을 사용하는지 알려주는 목적으로 사용한다.

- 권한 등록을 필요로 하는 기능사용할 때 권한을 등록하지 않으면 오류가 발생하여 개발자는 반드시 권한을 등록해야 하고 등록된 권한은 사용자에게 고지된다.

- 안드로이드 6.0(마시멜로우)버전 부터 개인 정보와 관련된 권한은 애플리케이션 내부에서 고지하고 사용 허가를 받아야 한다.

- 권한 사용시 반드시 사용자에게 고지하고 이를 승인 받는 작업이 필요하다.

- 사용 허가를 받을 필요 없는 권한은 사용 허가를 받은 상태로 처리된다.

 

 

+ build.gradle(app) 에서 plugins에 

id 'kotlin-android-extensions' 를 적어주는 경우 2가지 사용이 가능하다

1. View binding

2. 안드로이드에서 객체를 직렬화할때 사용하는 'parcelable'을 위한 기능

 

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.sypark.permission">

    <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"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
</manifest>

package com.sypark.permission

import android.Manifest
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    //권한 명시
    val permission_list = arrayOf(
        Manifest.permission.INTERNET,
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.WRITE_CONTACTS,
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.WRITE_EXTERNAL_STORAGE
    )

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        textView.text=""

        for(permission in permission_list){
            // 권한 허용 여부를 확인한다.
            val check = checkCallingOrSelfPermission(permission)

            if(check == PackageManager.PERMISSION_GRANTED){
                textView.append("${permission} : 허용\n")
            }else if(check == PackageManager.PERMISSION_DENIED){
                textView.append("${permission} : 거부\n")
            }
        }
    }
}

button.setOnClickListener {
            // 거부된 권한 사용자에게 확인받기
            requestPermissions(permission_list,0)
        }

전부다 allow해준 결과

onRequestPermissionResult 사용

-> Permission을 허용했는지, 안했는지 알려준다.

override fun onRequestPermissionsResult(
        requestCode: Int,
        permissions: Array<out String>,
        grantResults: IntArray
    ) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults)

        textView.text = ""

        for(idx in grantResults.indices){
            if(grantResults[idx] == PackageManager.PERMISSION_GRANTED){
                textView.append("${permissions[idx]} : 허용\n")
            }else if(grantResults[idx] == PackageManager.PERMISSION_DENIED){
                textView.append("${permissions[idx]}: 거부\n")
           }
        }
    }

권한 확인을 전부다 allow로 한 경우

거부 -> 허용으로 변환

 

정리

- 안드로이드는 제공되는 기능 중 권한을 등록해야 사용할 수 있는 기능들이 있다.

- 안드로이드는 6.0(마시멜로우) 버전 부터는 애플리케이션 내부에서 권한 사용을 고지하고

사용 허가를 받아야 하는 처리가 추가되었다.

'2022년' 카테고리의 다른 글

Context Menu  (0) 2021.10.18
Option Menu  (0) 2021.10.18
RecyclerView  (0) 2021.10.11
Array.prototype.indexOf()  (0) 2021.07.24
TP:BCSD - Account&Calendar / 2021-07-18  (0) 2021.07.19