Alin
Alin

Reputation: 14571

Query Android contact to get ACCOUNT_TYPE and ACCOUNT_NAME

I am able to obtain a list of contacts and their basic information like: name. phones, emails, ims, notes, organizations for backup purposes by using ContactsContract.Contacts.CONTENT_URI for a list of Contacts and other specific URIs for different information type.

I need, in order to fully restore all the information two more fields:

ContactsContract.RawContacts.ACCOUNT_TYPE

ContactsContract.RawContacts.ACCOUNT_NAME

Can anyone guide me how to obtain this info, knowing the Contact Id from ContactsContract.Contacts.CONTENT_URI ?

Thank you

Upvotes: 4

Views: 8461

Answers (2)

Raju
Raju

Reputation: 92

The above answer is perfect if you are looking for account information using the contactID column. But, often information is stored using rawContactID. So, if you want to access account information for a raw-contact-id then you can use this method below. The key difference is that I am using the _ID column from the rawContacts table. This maps to the rawContactID that you will see in other tables

public int   updateAccountInfoForContactData(String rawContactID) {
    int    accountPos    = 0;

    Cursor cursor        = null;
    String accountName   = null;
    String accountType   = null;
    Uri rawContactUri      = ContactsContract.RawContacts.CONTENT_URI;
    String[] syncColumns   = new String[] {
                                            ContactsContract.RawContacts.ACCOUNT_NAME,
                                            ContactsContract.RawContacts.ACCOUNT_TYPE,
                                    };
    String   whereClause   = ContactsContract.RawContacts._ID +"=?";
    String[] whereParams   = new String[]{String.valueOf(rawContactID)};
    //Uri rawContactUri = ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI, longContactID);
    try {
        cursor = mContext.getContentResolver().query(
                rawContactUri,
                syncColumns,
                whereClause,
                whereParams,
                null);

        if (cursor != null && cursor.getCount() >0)
        {
            cursor.moveToFirst();
            if(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME) >= 0) {
                accountName = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME));
            }
            if(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE) >= 0) {
                accountType = cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE));
            }
            cursor.close();
            cursor = null;

        }
    } catch (Exception e) {
        Log.d(TAG, "getting account info failed");
    } finally{
        if(cursor != null) {
            cursor.close();
        }
        cursor = null;
    }

    return(accountPos);
}

Upvotes: 0

Alin
Alin

Reputation: 14571

public ContactAccount getContactAccount(Long id,ContentResolver contentResolver) {

        ContactAccount account = null;

        Cursor cursor = null;
        try {

             cursor = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI,
                     new String[]{ContactsContract.RawContacts.ACCOUNT_NAME, ContactsContract.RawContacts.ACCOUNT_TYPE},
                     ContactsContract.RawContacts.CONTACT_ID +"=?",
                     new String[]{String.valueOf(id)},
                     null);

            if (cursor != null && cursor.getCount() >0)
            {
                cursor.moveToFirst();
                account = new ContactAccount();
                account.setAccountName(cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_NAME)));
                account.setAccountType(cursor.getString(cursor.getColumnIndex(ContactsContract.RawContacts.ACCOUNT_TYPE)));
                cursor.close();
            }
        } catch (Exception e) {
            Utils.log(this.getClass().getName(), e.getMessage()); 
        } finally{
          cursor.close();
        }

        return(account);
    }

Upvotes: 13

Related Questions