您的位置:首页 > 其它

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

2013-04-08 13:58 274 查看
我原本从网上找了好多源码。都是是从手机上获得的联系人,可是运行之后才是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(
4000
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; 
        }    


 

以上代码亲测可用。因为都是可用的代码片段。粘帖即可使用。不再附源码。 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: