• 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,大家单独调试时记得增加访问联系人权限

    	/**
    	 * 查找所有联系人
    	 */
    	public static List<SWWContact> findAllContacts(ContentResolver cr) {
    		List<SWWContact> list = new ArrayList<SWWContact>();
    		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;
    	}


  • 相关阅读:
    ios开发 MJExtension
    ios开发 time profile用法
    ios开发 UIApplication
    ios AFNetWorking
    ios开发 为什么NSString、NSArray、NSDIctionary用copy修饰
    ios动画
    ios开发GCD
    重要链接
    记录,员工关心的内容。
    怎样用 Wise Installation System 制作汉化补丁?(转)
  • 原文地址:https://www.cnblogs.com/yishaochu/p/5078633.html
Copyright © 2020-2023  润新知