Deperecated/Android_강의

안드로이드 - 권한 및 쓰레드

누알라리 2020. 2. 14. 16:15
1. 권한(Permissions)

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

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

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

 

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

 

- 안드로이드 마시멜로우 버전부터 개인 정보와 관련된 권한은 애플리케이션 내부에서 고지하고 사용 허가를 맡도록 변경되었다.

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

 

- 애플리케이션 내부에서 권한 사용을 고지하고 사용 허가를 받아야 하는 권한 목록

 

https://developer.android.com/training/permissions/requesting

 

앱 권한 요청  |  Android 개발자  |  Android Developers

모든 Android 앱은 액세스가 제한된 샌드박스에서 실행됩니다. 자체 샌드박스 밖에 있는 리소스나 정보를 앱이 사용해야 하는 경우에는 앱이 적절한 권한을 요청해야 합니다. 앱에 권한이 필요하다고 선언하려면 권한을 앱 manifest에 표시한 후 사용자가 런타임에 각 권한을 승인하도록 요청합니다(Android 6.0 이상). 이 페이지에서는 Android 지원 라이브러리를 사용하여 권한을 확인하고 요청하는 방법을 설명합니다. Android 프레임워크는 A

developer.android.com

2. 권한 등록

- AndroidManifest.xml에서 권한 등록 가능

....
    <uses-permission android:name="android.permission.INTERNET" />0
    <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.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
</manifest>

 

3. 권한 등록 승인 요청 메세지 띄우기

- AndroidManifest.xml에 있는 모든 권한에 승인 요청을 띄울 필요는 없고, 요청을 받아야하는 권한에만 띄운다.

 

1. 배열에 넣기.

    // 1. 등록한 권한들 중에서 확인이 필요한 권한들만 목록으로 코드로 짜주면 된다.
    var permission_list = arrayOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.RECEIVE_SMS,
        Manifest.permission.SEND_SMS
    )

 

2. 권한 확인(안드로이드 마쉬멜로우 이상 버전에서부터만 확인한다.)

    // 2. 권한 확인(안드로이드 마쉬멜로우 이상 버전에서부터만 검사한다)
    fun checkPermission(){
        if(Build.VERSION.SDK_INT < Build.VERSION_CODES.M)
        {
            return
        }
        else
        {
            // Kotlin에서의 for문은 배열을 도는 용도.
            for(permission : String in permission_list)
            {
                // 권한 허용했는지 묻는 용도(INT)
                var chk = checkCallingOrSelfPermission(permission)

                // 만일 거절했었다면,
                if(chk == PackageManager.PERMISSION_DENIED)
                {
                    // 권한 승인 요청
                    requestPermissions(permission_list, 0)

                    break
                }
            }
        }
    }

 

3. 앱 실행될 때 함수 호출.

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

        checkPermission()
    }