hiak
hiak

Reputation: 93

How can I access ContactsContract Profile?

I tried to read the complete profile information such a (Full name, phone, adresse, mail .... ).

I have searched everywhere for a good example code. I tried many ways (Uri => Cursor) to access the Profile. At this time I can fetch just the Full name (of the Profile contact), nothing more.

I can fetch data of other contacts using an Intent, sending to the Contacts app, BUT I CAN'T READ THE PROFILE CONTACT (JUST FULL NAME).

I have added the READ_PROFILE permission in the manifest file.

With the following code I get the Full Name (I can also access first and last name separately ):

Uri uriProfile = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI,
                    ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
Cursor cursorProfile = this.getContentResolver().query(uriProfile,
                    null, null, null, null);
String projection = Profile.DISPLAY_NAME;
String profileName = cursorProfile.getString(cursorProfile.getColumnIndex(projection);

But when I use this the following projection to get Phone Number, it returns an error and the app stops working:

String projection = ContactsContract.CommonDataKinds.Phone.NUMBER

Upvotes: 0

Views: 1145

Answers (1)

hiak
hiak

Reputation: 93

I found a solution using this code:

  1. Get an URI Profile
  2. Crate a cursor pointing to the URI content with null projection. Because for the profile, data are saved differently than a normal contact.
  3. Point the cursor to the wanted data using MIMETYPE.

Uri uriProfile = Uri.withAppendedPath(ContactsContract.Profile.CONTENT_URI, ContactsContract.Contacts.Data.CONTENT_DIRECTORY); Cursor cursorProfile = getApplicationContext().getContentResolver().query(uriProfile, null, null, null, null); String cursorProfile_MIMIETYPE = cursorProfile.getString(cursorProfile.getColumnIndex("MIMETYPE"));

Upvotes: 0

Related Questions