获取手机上的联系人的详细信息

我原本从网上找了好多源码。都是是从手机上获得的联系人,可是运行之后才是all联系人。其实在数据库里有个字段用于区分手机和sim。
ContactsContract.RawContacts.ACCOUNT_TYPE,就是这个字段。

有两种type。以我用的华为手机为例。com.android.huawei.phone和com.android.huawei.sim
接下来你懂了吧。

  ContentResolver cr = this.getContentResolver(); 
//取得电话本中开始一项的光标 
Cursor cursor = cr.query(Phone.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
ContactInfo cci = new ContactInfo();
// 取得联系人ID 
int id = cursor.getInt(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
String typeString=cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));
if (typeString.contains("sim")) {
continue;
}
}

 


这下你懂了把。
至于更详细的信息:包括:邮箱地址,。家庭地址。IM地址。头像。

获取家庭地址:

 

     ArrayList<Address> addrList = new ArrayList<Address>();     
                                String where = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; 
                                String[] whereParameters = new String[]{id+"",  
                                                ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE};  
                                Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, null, where, whereParameters, null); 
                                while(addrCur.moveToNext()) {     
                                        String poBox = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POBOX));   
                                        String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));  
                                        String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));     
                                        String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));  
                                        String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));  
                                        String country = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.COUNTRY)); 
                                        String type = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.TYPE));    
                                        Address a = new Address(poBox, street, city, state, postalCode, country, type);     
                                        addrList.add(a);
                                        //System.out.println("adress________>"+a.getCity()+a.getCountry()+a.getPoBox()+a.getState()+a.getStreet()+a.getType());
                                }  

 

获取邮件地址:

 ArrayList<Email> emails = new ArrayList<Email>();
                                        Cursor emailCur = cr.query(
                                                        ContactsContract.CommonDataKinds.Email.CONTENT_URI,
                                                        null,
                                                        ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                                                        new String[]{id+""}, null);
                                        while (emailCur.moveToNext()) {
                                                Email e = new Email(emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA))
                                                                ,emailCur.getString(emailCur.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE))
                                                );
                                                emails.add(e);
                                        //        System.out.println("emial-------------->"+e.getAddress()+e.getType());
                                        }
                                        emailCur.close();

 

获取im地址:
其中im有包含name和type两个。属性。这个可以看看自己的联系人。其中QQ为3/

ArrayList<IM> imList = new ArrayList<IM>();  
                                String where2 = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?";   
                                String[] whereParameters2 = new String[]{id+"",   
                                                ContactsContract.CommonDataKinds.Im.CONTENT_ITEM_TYPE};  
                                Cursor imCur = cr.query(ContactsContract.Data.CONTENT_URI, null, where2, whereParameters2, null);     
                                if (imCur.moveToFirst()) {      
                                        String imName = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.DATA));   
                                        String imType;       
                                        imType = imCur.getString(imCur.getColumnIndex(ContactsContract.CommonDataKinds.Im.TYPE));    
                                        if (imName.length() > 0) {        
                                                IM im = new IM(imName, imType);   
                                                imList.add(im);       
                                        //        System.out.println("QQ========>"+im.getName()+im.getType());
                                        }       
                                }      
                                imCur.close(); 


头像的获得:
先获得photoid。然后根据photoid再得到头像数据。头像使用blob类型存储的。直接转换即可。

 cci.setPhotoId(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.PHOTO_ID)));
                                        System.out.println(cci.getDisplayName()+"头像id"+cci.getPhotoId());
                                        if (cci.getPhotoId()!=null) {
                                                
                                                bitmap a=ContactImageLoader.loadImageFromUrl(this, cci.getPhotoId());
                                          
                                           
                                                }else {
                                                      
                                                        Log.i(cci.getDisplayName(), "头像为空");
                                                }
                                        
                               


根据id转为bitmap:

public synchronized static Bitmap loadImageFromUrl(Context ct,String photo_id) {  
                Bitmap d = null;
                try{  
                        String[] projection = new String[]{ContactsContract.Data.DATA15};
                        String selection = "ContactsContract.Data._ID = " + photo_id;
                        Cursor cur = ct.getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, selection, null, null); 
                        cur.moveToFirst();
                        byte[] contactIcon = null;
                        if(cur.getBlob(cur.getColumnIndex(ContactsContract.Data.DATA15))!=null){
                                contactIcon=cur.getBlob(cur.getColumnIndex(ContactsContract.Data.DATA15));
                                d=BitmapFactory.decodeByteArray(contactIcon, 0, contactIcon.length); 
                        }
                } catch (Exception e) {  
                        e.printStackTrace();  
                }  
                return d;  
        }    


 



以上代码亲测可用。因为都是可用的代码片段。粘帖即可使用。不再附源码。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值