项目中用到了联系人根据字母排序,在android4.0手机上是可以的,但是在android4.4以上的手机排序是乱的,一般字母排序都是根据sort_key这个拼音进行排序,而android5.0这个字段没有保存拼音,直接是汉字.

于是我把4.4的手机上联系人db文件查看了一下,发现phonebook_label保存的是联系人姓名拼音首字母

如何使用adb命令把联系人db文件copy到电脑。

1.手机跟电脑usb数据线进行连接,并且电脑端装了手机usb驱动(简单说明就是在开发调试环境下)

2.联系人数据库copy到sdcard

  cat /data/data/com.android.providers.contacts/databases/contacts2.db > /sdcard/contacts2.db

3.先exit退出adb shell界面  把sdcard的db文件复制到d盘

  adb   pull  /sdcard/contacts2.db  D:\contacts2.db

以下是我写的一段查询数据库说有联系人的代码,根据操作系统不同查询不同的sort_key,大家单独调试时记得增加访问联系人权限

/**

* 查找所有联系人

*/

public static List findAllContacts(ContentResolver cr) {

List list = new ArrayList();

String[] projection=new String[]{

ContactsContract.Contacts.DISPLAY_NAME,

ContactsContract.Contacts.SORT_KEY_PRIMARY,

ContactsContract.Contacts._ID,

ContactsContract.Contacts.PHOTO_ID,

ContactsContract.Contacts.LOOKUP_KEY};

//如果android操作系统版本4.4或4.4以上就要用phonebook_label而不是sort_key字段

if(android.os.Build.VERSION.SDK_INT>=19){

projection[1]="phonebook_label";

}

Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,

projection, null, null,

"sort_key COLLATE LOCALIZED asc");

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

do {

SWWContact cb = new SWWContact();

cb.setDisplayName(cursor.getString(0));

String sortKey=cursor.getString(1);

if(sortKey.trim().substring(0,1).matches("[a-z]")){

sortKey=sortKey.toUpperCase();

}

cb.setSortKey(sortKey);

cb.setContactId(cursor.getInt(2));

cb.setPhotoId(cursor.getLong(3));

cb.setLookUpKey(cursor.getString(4));

cb.setPhoneNum(getContactNumber(cursor.getInt(2),cr));

list.add(cb);

} while (cursor.moveToNext());

cursor.close();

}

return list;

}

/**

* 根据联系人ID得到联系人号码

*/

private static String getContactNumber(int contactId,ContentResolver cr){

Cursor phones = cr.query(

ContactsContract.CommonDataKinds.Phone.CONTENT_URI,

null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID

+ " = " + contactId, null, null);

String phoneNumber="";

if(phones.moveToNext()){

phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

}

phones.close();

return phoneNumber;

}

推荐链接

评论可见,请评论后查看内容,谢谢!!!评论后请刷新页面。