手机通讯录式排序php,Android获取手机通讯录-根据排序方式进行

获取手机通讯录要求和手机上的通讯录软件排序一样,即使手机通讯录更改了排序方式和显示方式 `名字和姓氏的方式 `

在英文模式下可以进行更改联系人设置,由于安卓系统已经将获取联系人排序方式这个取消掉了,所以部分安卓手机也就没有提供这个更改联系人排序这个功能,通过查看源码可知新版本中关于联系人排序的参数放在 SharePreference的privatemode中。

获取系统的排序方式

根据下面代码能够获取到当前系统的排序参数,这个参数在大部分系统中被屏蔽不能获取,经过测试在小米的miui上面可以拿到,这样久能保证和系统的排序一致的方式显示通讯录

try {

sortOrder = Settings.System.getInt(contentResolver, "android.contacts.SORT_ORDER")

Toast.makeText(this, "Have SortOrder " + sortOrder.toString(), Toast.LENGTH_SHORT).show()

} catch (e: Exception) {

Toast.makeText(this, "No SortOrder " + e.message, Toast.LENGTH_SHORT).show()

e.printStackTrace()

}

获取联系人

获取联系人,按照默认排序,根据从上面拿到的 sortOrder看直接获取。当sortOrder能够拿到的时候在小米miui上面不是1则说明不是按照默认排序,那么使用 SORT_KEY_ALTERNATIVE 顺序获取联系人列表

fun getContacts(): ArrayList {

// 联系人的Uri,也就是content://com.android.contacts/contacts

val uri = ContactsContract.Contacts.CONTENT_URI

//指定获取_id和display_name两列数据,display_name即为姓名

val projection = arrayOf(ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME)

val sortOrderStr = when(sortOrder){

1 -> {

ContactsContract.Contacts.SORT_KEY_PRIMARY + " COLLATE LOCALIZED asc"

}

else -> {

ContactsContract.Contacts.SORT_KEY_ALTERNATIVE + " COLLATE LOCALIZED asc"

}

}

val cursor = contentResolver.query(uri, projection, null, null, sortOrderStr)

val arr = arrayListOf()

var i = 0

if (cursor != null && cursor.moveToFirst()) {

do {

val id = cursor.getLong(0)

// 获取姓名

val name = cursor.getString(1)

// 指定获取NUMBER这一列数据

val phoneProjection = arrayOf(ContactsContract.CommonDataKinds.Phone.NUMBER)

arr.add(i, id.toString() + " , 姓名:" + name)

// 根据联系人的ID获取此人的电话号码

val phonesCusor = this.contentResolver.query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

phoneProjection,

ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + id,

null,

null)

// //因为每个联系人可能有多个电话号码,所以需要遍历

if (phonesCusor != null && phonesCusor.moveToFirst()) {

// do {

val num = phonesCusor.getString(0)

arr[i] += " , 电话号码:$num"

// break

// } while (phonesCusor.moveToNext())

}

i++

} while (cursor.moveToNext())

}

cursor.close()

return arr

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值