[Android] 연락처 권한 permission 가져오기

sooj·2023년 9월 6일
0

.android

목록 보기
6/18

https://jdroid.tistory.com/24

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
이거 잘 쓰지는 않는거같음......!!


+permission 권한 정리 블로그

profile
하루하루는 성실하게 인생 전체는 되는대로

0개의 댓글

관련 채용 정보