- 안드로이드는 개인 정보, 센서, 카메라, 저장소 등 개인 정보와 관련된 기능을 사용하기 위해서는 권한을 등록해야 한다.
- 권한 등록은 사용자가 애플리케이션을 다운로드 받거나 설치 후 애플리케이션 정보에서 확인이 가능하다.
- 권한 등록의 목적은 사용자에게 애플리케이션이 어떠한 기능을 사용하는지 알려주는 목적으로 사용한다.
- 권한 등록을 필요로 하는 기능을 사용할 때 권한을 등록하지 않으면 오류가 발생하여 개발자는 반드시 권한을 등록해야 하고 등록된 권한은 사용자에게 고지된다.
- 안드로이드 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 |