반응형

Permission

설명

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

코드

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

    <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.Androidexample">
        <activity android:name=".MainActivity">
            <intent-filter>
                <!-- Entry Point -->
                <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.SEND_SMS" />
    <uses-permission android:name="android.permission.RECEIVE_SMS" />
</manifest>
res/layout/activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="" />

</LinearLayout>
MainActivity
class MainActivity : AppCompatActivity() {
    private var textView: TextView? = null
    private val permissionList = arrayOf(
        Manifest.permission.ACCESS_FINE_LOCATION,
        Manifest.permission.ACCESS_COARSE_LOCATION,
        Manifest.permission.READ_CONTACTS,
        Manifest.permission.WRITE_CONTACTS,
        Manifest.permission.SEND_SMS,
        Manifest.permission.RECEIVE_SMS
    )

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

        textView = findViewById(R.id.textView)

        checkPermission()
    }

    private fun checkPermission() {
        // 마쉬멜로우 버전 이전까지는 권한이 모두 활성화 되어있는 상태이므로 처리 불필요
        // 마쉬멜로우 이후 버전부터는 모두 비활성화 되어있고 사용자가 활성화 시키는 방식이므로 해당 처리 필요
        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
            return
        }

        for (permission: String in permissionList) {
            val status = checkCallingOrSelfPermission(permission)

            // 못하면 권한 요청 해제
            if (status == PackageManager.PERMISSION_DENIED) {
                requestPermissions(permissionList, 0)
                break
            }
        }
    }

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

        textView?.text = ""

        for (index in grantResults.indices) {
            if (grantResults[index] == PackageManager.PERMISSION_GRANTED) {
                textView?.append("${permissionList[index]} : 허용함\n")
            } else {
                textView?.append("${permissionList[index]} : 허용하지 않음\n")
            }
        }
    }
}

참고

반응형

'Development > Android' 카테고리의 다른 글

[Android] Http Network  (0) 2021.02.09
[Android] File IO  (0) 2021.02.09
[Android] Notification  (0) 2021.02.09
[Android] Application  (0) 2021.02.09
[Android] ViewModel  (0) 2021.02.09

+ Recent posts