【问题标题】:How to get all contacts and all of their attributes如何获取所有联系人及其所有属性
【发布时间】:2012-05-25 14:14:40
【问题描述】:

有人知道获取所有联系人及其所有属性(姓名、电话、电子邮件等)的便捷方式吗?

我需要一个适用于 Android 1.5 到 4.0 的解决方案。

非常感谢

【问题讨论】:

    标签: android contacts


    【解决方案1】:

    要获取姓名和号码,请使用以下代码::

    private void getNameNumber(){
            Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
            ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
            String[] projection    = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Phone.NUMBER };
            Cursor names = getContentResolver().query(uri, projection, null, null, null);
    
            int indexName = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            int indexNumber = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            names.moveToFirst();
            do {
    
                String name   = names.getString(indexName);
                Log.e("Name new:", name);
                String number = names.getString(indexNumber);
                Log.e("Number new:","::"+number);
    
            } while (names.moveToNext());
        }
    

    要获取所有详细信息,请使用以下代码并根据您的要求进行修改。

    private void getDetails(){
            Uri uri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
            ContentResolver cr = getContentResolver();
            Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null);
                String[] projection    = new String[] {ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
                            ContactsContract.CommonDataKinds.Phone.NUMBER ,ContactsContract.CommonDataKinds.Email.DATA };
            Cursor names = getContentResolver().query(uri, projection, null, null, null);
    
            int indexName = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME);
            int indexNumber = names.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
            names.moveToFirst();
            do {
    
                String name   = names.getString(indexName);
                Log.e("Name new:", name);
                String number = names.getString(indexNumber);
                Log.e("Number new:","::"+number);
    
            } while (names.moveToNext());
            // email
    
    
                while (cur.moveToNext()) {
                    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                    Cursor email = cr.query( 
                            ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                            ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", 
                                    new String[]{id}, null); 
                    while (email.moveToNext()) { 
                        //to get the contact names
                        // if the email addresses were stored in an array
                        String emailid = email.getString(email.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                        Log.e("Email id ::", emailid);
                        String emailType = email.getString(email.getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); 
                        Log.e("Email Type ::", emailType);
    
                    } 
                    email.close();
                }
    
    
            //address
                while (cur.moveToNext()) {
                String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
                Cursor addrCur = cr.query(ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI,null,
                        ContactsContract.CommonDataKinds.StructuredPostal.CONTACT_ID+ " = ?",
                        new String[] { id },null);
                while(addrCur.moveToNext()) {
                    String street = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.STREET));
                    Log.e("Street ::", street);
                    String city = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.CITY));
                    Log.e("City ::", city);
                    String state = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.REGION));
                    Log.e("State ::", state);
                    String postalCode = addrCur.getString(addrCur.getColumnIndex(ContactsContract.CommonDataKinds.StructuredPostal.POSTCODE));
                    Log.e("Postal Code ::", postalCode);
                } 
                addrCur.close();
    
            }
        }
    

    【讨论】:

    • 感谢您的代码。它工作正常。但我无法获取地址详细信息..即使它也无法在 logcat 中打印..请帮助我
    • cur 在退出电子邮件 while 循环时为空。您应该在电子邮件循环中使用地址查询。
    • 如果电子邮件地址与名称进行映射,但它们作为单独的列表出现,那就太好了
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多