

목적
앱 내부에서 갤러리에 저장되어 있는 사진을 이용케 함
기능구현
1. 앱에 권한이 부여되었는지 확인
2. 사용자가 이미 앱에 특정 권한을 부여했는지 확인하려면
ContextCompat.checkSelfPermission() 메서드에 권한을 전달합니다.
3. 앱에 권한이 있는지에 따라
PERMISSION_GRANTED 또는 PERMISSION_DENIED를 반환합니다.
3-1.
PERMISSION_GRANTED → 권한 부여 O
PERMISSION_DENIED → 권한 부여 X
4. PERMISSION_DENIED를 반환하면 shouldShowRequestPermissionRationale()을 호출
5. 사용자가 사용 설정하려는 기능에 특정 권한이 필요한 이유를 설명합니다.
5-1.
requestPermissions()를 호출하면 시스템에서 표시하는 권한 대화상자에 앱에서 원하는 권한이
무엇인지 표시 (팝업으로 설명)
6. requestPermissions()를 호출하기 전에 앱에서 권한을 요청하는 이유를 사용자에게 설명하는 것이 좋습니다.
요약
- 앱 특정권한 부여 확인
- 팝업 이후 권한을 요청 이유 설명

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.test">
<uses-permission android:name="android.Manifest.permission.READ_EXTERNAL_STORAGE"/>
<application
<activity>
</activity>
</application>
</manifest>
앱이 올바르게 작동하기 위해 사용자가 반드시 부여해야 하는 시스템 권한
Manifest
- 스타일 및 테마를 변경할 수 있다.
- 시작 Activity를 변경할 수 있다.
- 아이콘 및 레이블을 변경할 수 있다.
- 권한을 요청할 수 있다.
EX) 카메라, 인터넷, 갤러리, 위치
import android.content.pm.PackageManager
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AlertDialog
import androidx.core.content.ContextCompat
class MainActivity : AppCompatActivity() {
private val add : Button by lazy {
findViewById(R.id.add)
}
private val start : Button by lazy {
findViewById(R.id.start)
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//권한을 받기 위한 메소드 호출
initadd()
}
//코드 추상화 : 같은 기능을 메소드로 감싸서 init을 하면 구별하기 쉽다
private fun initadd() {
//[추가] 버튼을 눌렀을 시 권한 확인, add 버튼을 눌렀을 시
add.setOnClickListener {
when {
//특정 권한이 부여 되어있는지 확인.
//첫 번째 인자는 Context(this), 두번째 인자는 권한 받아야할 종류
ContextCompat.checkSelfPermission(
this,
android.Manifest.permission.READ_EXTERNAL_STORAGE
) == PackageManager.PERMISSION_GRANTED -> {
//You can use the API that requires the permission.
}
//권한 받아야할 종류(Permission) = android.Manifest.permission.READ_EXTERNAL_STORAGE
shouldShowRequestPermissionRationale(android.Manifest.permission.READ_EXTERNAL_STORAGE) -> {
//권한 팝업 띄우는 기능
AlertDialog.Builder(this)
.setTitle("We need Permission")
.setMessage("For Photo")
.setPositiveButton("agree") { _, _ ->
requestPermissions(arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), 1000)
}
.setNegativeButton("cancle") { _, _ ->}
.create()
.show()
}
else -> {
//권한요청 팝업
requestPermissions(arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE), 1000)
}
}
}
}
}
결과 화면
https://developer.android.com/training/permissions/requesting?hl=ko
앱 권한 요청 | Android 개발자 | Android Developers
앱 권한 요청 모든 Android 앱은 액세스가 제한된 샌드박스에서 실행됩니다. 앱이 자체 샌드박스 밖에 있는 리소스나 정보를 사용해야 하는 경우 권한을 선언하고 이 액세스를 제공하는 권한 요청
developer.android.com
https://www.youtube.com/watch?time_continue=200&v=x38dYUm7tCY&feature=emb_logo
'Android-Kotlin📱' 카테고리의 다른 글
코틀린 뷰바인딩 Kotlin ViewBinding (0) | 2022.05.15 |
---|---|
Kotlin Retrofit (0) | 2022.05.09 |
Kotlin Collection (코틀린 Collection) (0) | 2022.03.30 |
Android Studio 내 스마트폰 연결, USB 디버깅 (0) | 2022.03.29 |
Kotlin Dependencies (0) | 2022.03.27 |