android5.0联系人 sort_key改成phonebook_label

简介:

项目中用到了联系人根据字母排序,在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,大家单独调试时记得增加访问联系人权限

  1. /** 
  2.  * 查找所有联系人 
  3.  */  
  4. public static List<SWWContact> findAllContacts(ContentResolver cr) {  
  5.     List<SWWContact> list = new ArrayList<SWWContact>();  
  6.     String[] projection=new String[]{  
  7.             ContactsContract.Contacts.DISPLAY_NAME,  
  8.             ContactsContract.Contacts.SORT_KEY_PRIMARY,  
  9.             ContactsContract.Contacts._ID,  
  10.             ContactsContract.Contacts.PHOTO_ID,  
  11.             ContactsContract.Contacts.LOOKUP_KEY};  
  12.       
  13.     //如果android操作系统版本4.4或4.4以上就要用phonebook_label而不是sort_key字段  
  14.     if(android.os.Build.VERSION.SDK_INT>=19){  
  15.         projection[1]="phonebook_label";  
  16.     }  
  17.       
  18.     Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI,  
  19.                     projection, nullnull,  
  20.                     "sort_key COLLATE LOCALIZED asc");  
  21.     if (null!=cursor&&cursor.moveToFirst()){  
  22.         do {  
  23.             SWWContact cb = new SWWContact();  
  24.             cb.setDisplayName(cursor.getString(0));  
  25.               
  26.             String sortKey=cursor.getString(1);  
  27.             if(sortKey.trim().substring(0,1).matches("[a-z]")){  
  28.                 sortKey=sortKey.toUpperCase();  
  29.             }  
  30.             cb.setSortKey(sortKey);  
  31.               
  32.             cb.setContactId(cursor.getInt(2));  
  33.             cb.setPhotoId(cursor.getLong(3));  
  34.             cb.setLookUpKey(cursor.getString(4));  
  35.                cb.setPhoneNum(getContactNumber(cursor.getInt(2),cr));  
  36.             list.add(cb);  
  37.         } while (cursor.moveToNext());  
  38.         cursor.close();  
  39.     }  
  40.     return list;  
  41. }  
  42.   
  43.   
  44. /** 
  45.  * 根据联系人ID得到联系人号码 
  46.  */  
  47. private static String getContactNumber(int contactId,ContentResolver cr){  
  48.        Cursor phones = cr.query(    
  49.                ContactsContract.CommonDataKinds.Phone.CONTENT_URI,    
  50.                null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID    
  51.                        + " = " + contactId, nullnull);  
  52.        String phoneNumber="";  
  53.        if(phones.moveToNext()){    
  54.            phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));    
  55.        }  
  56.        phones.close();  
  57.        return phoneNumber;  
  58. }  
目录
相关文章
|
7月前
|
XML Java Android开发
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
Android Studio开发之使用内容组件Content获取通讯信息讲解及实战(附源码 包括添加手机联系人和发短信)
445 0
|
7月前
|
Android开发
Android通讯录开发之通讯录联系人搜索功能最新实现
Android通讯录开发之通讯录联系人搜索功能最新实现
|
Android开发
android操作通讯录的联系人
android操作通讯录的联系人
104 0
|
Android开发
Android笔记: 获取手机联系人列表
Android笔记: 获取手机联系人列表
164 0
Android笔记: 获取手机联系人列表
|
Android开发
Android之运行时相机权限和联系人权限获取
原文:Android之运行时相机权限和联系人权限获取 本文链接:http://blog.csdn.net/qq_16628781/article/details/61623502 Android之运行时相机权限...
1098 0