Note that there are some explanatory texts on larger screens.

plurals
  1. POContact API problem for 1.6 & 2.2
    primarykey
    data
    text
    <p>I am looking for the solution to get contact details (Phone, Email, Zip) from the device. I have implemented code for OS 1.6 as well as for 2.2. I am building an application with API level 4 (1.6), but when I run the build in 2.2 device I am getting email and phone string null. </p> <p><strong>CODE - for OS 1.6</strong> </p> <pre><code>public void ImportCustomers(Context context) { StringBuilder sFirstname = new StringBuilder(); StringBuilder sLastname = new StringBuilder(); StringBuilder sEmail = new StringBuilder(); StringBuilder sZip = new StringBuilder(); StringBuilder sCell = new StringBuilder(); String name, phoneNumber, email, emailid, contactDetails[]; contactDetails = new String[] { People._ID, People.NAME, People.NUMBER, People.PRIMARY_EMAIL_ID }; Cursor contactCursor = context.getContentResolver().query( People.CONTENT_URI, contactDetails, null, null, People.NAME); while (contactCursor.moveToNext()) { name = contactCursor.getString(contactCursor .getColumnIndex(People.NAME)); phoneNumber = contactCursor.getString(contactCursor .getColumnIndex(People.NUMBER)); emailid = contactCursor.getString(contactCursor .getColumnIndex(People.PRIMARY_EMAIL_ID)); if (name.contains(" ")) { sFirstname.append("|" + name.split("\\ ")[0].trim()); sLastname.append("|" + name.split("\\ ")[1].trim()); } else if (name.contains(".")) { sFirstname.append("|" + name.split("\\.")[0].trim()); sLastname.append("|" + name.split("\\.")[1].trim()); } else if (name.contains(",")) { sFirstname.append("|" + name.split("\\,")[1].trim()); sLastname.append("|" + name.split("\\,")[0].trim()); } else { sFirstname.append("|" + name); sLastname.append("|Unknown"); } if (emailid != null) { Cursor emailCur = context.getContentResolver().query( Contacts.ContactMethods.CONTENT_EMAIL_URI, null, People.PRIMARY_EMAIL_ID + " = ?", new String[] { emailid }, null); while (emailCur.moveToNext()) { email = emailCur.getString(emailCur .getColumnIndex(Contacts.ContactMethods.DATA)); sEmail.append("|" + email); break; } emailCur.close(); emailCur = null; } else sEmail.append("|"); sCell.append("|" + (phoneNumber == null ? "" : phoneNumber)); sZip.append("|"); } contactCursor.close(); contactCursor = null; if (sFirstname.toString().length() == 0) { sFirstname.append("|"); sLastname.append("|"); sCell.append("|"); sEmail.append("|"); sZip.append("|"); } </code></pre> <p><strong>CODE - for OS 2.2</strong> </p> <pre><code>private void populateContacts() { ContentResolver cr = getContentResolver(); Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); if (cur.getCount() &gt; 0) { while (cur.moveToNext()) { // ID AND NAME FROM CONTACTS CONTRACTS String id = cur.getString(cur .getColumnIndex(ContactsContract.Contacts._ID)); String name = cur .getString(cur .getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); Log.i("Pratik", "ID :" + id); Log.i("Pratik", "NAME :" + name); // GET PHONE NUMBERS WITH QUERY STRING if (Integer .parseInt(cur .getString(cur .getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) &gt; 0) { Cursor pCur = cr.query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null); // WHILE WE HAVE CURSOR GET THE PHONE NUMERS while (pCur.moveToNext()) { // Do something with phones String phone = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DATA)); String phoneType = pCur .getString(pCur .getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE)); Log.i("Pratik", "PHONE :" + phone); Log.i("Pratik", "PHONE TYPE :" + phoneType); } pCur.close(); } //WHILE WE HAVE CURSOR GET THE EMAIL Cursor emailCur = cr.query( ContactsContract.CommonDataKinds.Email.CONTENT_URI, null, ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[] { id }, null); while (emailCur.moveToNext()) { // This would allow you get several email addresses // if the email addresses were stored in an array String email = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA)); String emailType = emailCur .getString(emailCur .getColumnIndex(ContactsContract.CommonDataKinds.Email.TYPE)); Log.i("Pratik", "EMAIL :" + email); Log.i("Pratik", "EMAIL TYPE :" + emailType); } emailCur.close(); //FOR GETTTING ZIP &amp; POSTAL String addrWhere = ContactsContract.Data.CONTACT_ID + " = ? AND " + ContactsContract.Data.MIMETYPE + " = ?"; String[] addrWhereParams = new String[]{id, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE}; Cursor addrCur = cr.query(ContactsContract.Data.CONTENT_URI, null, addrWhere, addrWhereParams, 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)); Log.i("Pratik", "POBOX :" + poBox); Log.i("Pratik", "STREET :" + street); Log.i("Pratik", "CITY :" + city); Log.i("Pratik", "STATE :" + state); Log.i("Pratik", "POSTALCODE :" + postalCode); Log.i("Pratik", "COUNTRY :" + country); Log.i("Pratik", "TYPE :" + type); } addrCur.close(); } } } </code></pre> <p><strong>Here is the code snippet I have found</strong> </p> <pre><code>public void ImportCustomer(Context context) { int sdk = new Integer(Build.VERSION.SDK).intValue(); if (sdk &gt;= 5) { try { Class clazz = Class.forName("android.provider.ContactsContract$Contacts"); CONTENT_URI = (Uri) clazz.getField("CONTENT_URI").get(clazz); } catch (Throwable t) { Log.e("PickDemo", "Exception when determining CONTENT_URI", t); } } else { CONTENT_URI = Contacts.People.CONTENT_URI; } } </code></pre> <p>Do anyone have suggestion how can I get contacts' information with help of this code snippet?</p> <p>Thanks Pratik Goswami </p>
    singulars
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload