https://bada744.tistory.com/140
(참고 블로그)
checkSelfPermission
requestPermissions
onRequestPermissionsResult
onCreate()
val status = ContextCompat.checkSelfPermission(this, "android.permission.READ_CONTACTS")
Log.d("test", status.toString())
if (status == PackageManager.PERMISSION_GRANTED) {
getContactsList()
} else {
if (shouldShowRequestPermissionRationale("android.permission.READ_CONTACTS")) {
Toast.makeText(this, "주소록 접근 권한이 필요합니다.", Toast.LENGTH_SHORT).show()
} else {
ActivityCompat.requestPermissions(
this,
arrayOf<String>("android.permission.READ_CONTACTS"),
100
)
}
}
}
override fun onRequestPermissionsResult(
requestCode: Int,
permissions: Array<out String>,
grantResults: IntArray
) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
getContactsList()
}
}
private fun getContactsList() {
val contacts = contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
null,
null,
null,
null
)
val contactManagerImpl = ContactManagerImpl.getInstance()
contacts?.let {
while (it.moveToNext()) {
val name =
contacts.getString(contacts.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
val number =
contacts.getString(contacts.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER))
contactManagerImpl.createContact(name, number, "aa@ss.com", 0)
}
}
contacts?.close()
}
}
처음 원하던 구성은
어플을 실행할 때마다 권한 요청이 떴으면 했다.
Allow / Don't Allow 를 한번 클릭하면 그 뒤로 안 떴음
생각해보니 일상에서 쓰는 어플에서도
한번 권한요청 팝업이 뜰때 수락/거절 누르면
그 뒤로는 설정가서 바꾸는 식
그래서
shouldShowRequestPermissionRationale("android.permission.READ_CONTACTS"
블로그에서는 다이얼로그를 활용했는데,
나는 토스트메시지로 '주소록 접근 권한 필요' 하다고 뜨게 해주었다.
shouldShowRequestPermissionRationale
이거 잘 쓰지는 않는거같음......!!