权限
internal val COC_PERMISSION = arrayOf
(
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_PHONE_STATE,
Manifest.permission.CALL_PHONE,
Manifest.permission.READ_CALL_LOG,
Manifest.permission.READ_CONTACTS
)
通讯录:
val contacts_columns = arrayOf("display_name", "sort_key", "contact_id", "data1")
fun getCallList(context: Context?): List<MCall> {
val callList: MutableList<MCall> = ArrayList()
val cursor = context?.contentResolver?.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, contacts_columns, null, null, null)
if (cursor != null) {
while (cursor.moveToNext()) {
val name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)) //姓名
val number = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)) //号码
val mCall = MCall()
mCall.name = name
mCall.number = number.replace(" ", "")
callList.add(mCall)
}
}
return callList
}
class MCall : Indexable {
override fun getIndex(): String {
return sortLetters
}
var name: String? = ""
lateinit var number: String
lateinit var sortLetters: String
fun number(): String? {
number = number.replace(" ", "")
return number
}
}
通话记录:
val log_columns = arrayOf(CallLog.Calls.CACHED_NAME// 通话记录的联系人
, CallLog.Calls.NUMBER// 通话记录的电话号码
, CallLog.Calls.DATE// 通话记录的日期
, CallLog.Calls.DURATION// 通话时长
, CallLog.Calls.TYPE)// 通话类型}
@SuppressLint("MissingPermission")
fun getCallLog(context: Context?): List<MCallLog> {
val callLogList = ArrayList<MCallLog>()
val cursor = context?.contentResolver?.query(CallLog.Calls.CONTENT_URI, log_columns, null, null, CallLog.Calls.DEFAULT_SORT_ORDER)
if (cursor != null) {
while (cursor.moveToNext()) {
val name = cursor.getString(cursor.getColumnIndex(CallLog.Calls.CACHED_NAME)) //姓名
val number = cursor.getString(cursor.getColumnIndex(CallLog.Calls.NUMBER)) //号码
val dateLong = cursor.getLong(cursor.getColumnIndex(CallLog.Calls.DATE)) //获取通话日期
val date = SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(Date(dateLong))
val mCallLog = MCallLog()
mCallLog.name = name
mCallLog.number = number
mCallLog.date = date
callLogList.add(mCallLog)
}
}
return callLogList
}
class MCallLog {
var name: String? = ""
var number: String = ""
var date: String = ""
}
简单的名字和手机号搜索功能:
fun searchCallList(context: Context?, str: String?): List<MCall> {
val callList = getCallList(context)
val searchList: MutableList<MCall> = ArrayList()
if (TextUtils.isEmpty(str)) {
searchList.clear()
searchList.addAll(callList)
} else {
for (i in callList) {
i.name?.let {
if (it.contains(str!!)) {
searchList.add(i)
}
}
i.number.let {
if (it.contains(str!!)) {
searchList.add(i)
}
}
}
}
return searchList
}
最后除了动态权限,别忘了AndroidManifest中的权限
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.READ_CALL_LOG" />
<uses-permission android:name="android.permission.WRITE_CALL_LOG" />
<uses-permission android:name="android.permission.CALL_PHONE" />