目标

读取安卓系统通讯录

实现方案
  1. 添加依赖
implementation 'com.qw:soulpermission:1.3.0'

  1. 主要代码
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//对按钮添加点击事件
button.setOnClickListener {
readContactsWithPermission()
}
}

/**
* 先申请读取系统通讯录权限,再进行读取。
*/
private fun readContactsWithPermission() {
SoulPermission.getInstance()
.checkAndRequestPermission(
Manifest.permission.READ_CONTACTS,
object : CheckRequestPermissionListener {
override fun onPermissionOk(permission: Permission) {
readContacts()
}

override fun onPermissionDenied(permission: Permission) {
toast("请授予权限")
}
})
}

/**
* 读取系统通讯录并展示总数和其中一个联系人的姓名与电话。
*/
private fun readContacts() {
val contacts: ArrayList<String> = getContactsInfo()
if (contacts.isNotEmpty()) {
toast("一共${contacts.size}个联系人,其中一个:${contacts.first()}")
}
}

/**
* 读取系统通讯录信息
*/
private fun getContactsInfo(): ArrayList<String> {
val dataList = ArrayList<String>()
contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null
)?.apply {
while (moveToNext()) {
val displayName =
getString(getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
val phone =
getString(getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
dataList.add("$displayName:$phone")
}
close()
}
return dataList
}

private fun toast(text: String) =
Toast.makeText(this, text, Toast.LENGTH_LONG).show()
}