요구사항
//permission
implementation 'io.github.ParkSangGwon:tedpermission-normal:3.3.0'
var permissionlistener: PermissionListener = object : PermissionListener {
override fun onPermissionGranted() {
//permission 수락시
}
override fun onPermissionDenied(deniedPermissions: MutableList<String>?) {
//permission 거부시
}
}
TedPermission.create()
.setPermissionListener(permissionlistener)
.setDeniedMessage({permission 거부시 나오는 message string})
.setPermissions(Manifest.permission.{확인하고 싶은 permission})
.check()
android 연락처 데이터의 구조가 조금 복잡하다
raw contact 밑에 data들이 있기 때문에 raw contact를 먼저 생성해 주고 내부에 들어갈 data들을 하나씩 넣어줘야 한다.
코드는 아래와 같다.
private fun addContacts(storeName: String, storeTel: String){
var text = ""
try{
var list = ArrayList<ContentProviderOperation>()
list.add( //rawContact 추가
ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE,null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME,null)
.build())
list.add( //data 추가
ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,storeName)//이름
.build())
list.add( //data 추가
ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID,0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,storeTel)//전화번호
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE)//번호타입(Type_Mobile:모바일)
.build())
requireContext().contentResolver.applyBatch(ContactsContract.AUTHORITY, list)
text = "저장되었습니다."
}catch(e : java.lang.Exception){
text = "저장에 실패했습니다."
}finally {
Toast.makeText(context,text,Toast.LENGTH_SHORT).show()
}
해당 코드는 버튼을 누르면 자동으로 연락처를 저장하는 코드이다.
만약 내용만 입력해두고 저장버튼은 사용자가 누르도록 하고 싶다면 아래와 같은 코드를 사용하면 된다.
private fun addContactByIntent(storeName: String, storeTel: String){
val intent = Intent().apply{
setAction(Intent.ACTION_INSERT)
setData(Uri.parse("content://contacts/people"))
putExtra(ContactsContract.Intents.Insert.NAME, storeName)
putExtra(ContactsContract.Intents.Insert.PHONE,storeTel)
putExtra(
ContactsContract.Intents.Insert.PHONE_TYPE,
ContactsContract.CommonDataKinds.Phone.TYPE_WORK
)
}
startActivity(intent)
}