2011-12-20 33 views
10

में प्रत्येक संपर्क मेरी एंड्रॉयड आवेदन में के लिए जन्मदिन जाओ, मैं निम्नलिखित कोड के साथ सभी संपर्कों को बाहर पढ़ें:एंड्रॉयड आवेदन

ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
if (cur.getCount() > 0) { 
    while (cur.moveToNext()) { 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     ContentResolver bd = getContentResolver(); 
     String where = Data.RAW_CONTACT_ID+" = "+id+" and "+Data.MIMETYPE+" = "+CommonDataKinds.Event.CONTENT_ITEM_TYPE; 
     Cursor bdc = bd.query(ContactsContract.Data.CONTENT_URI, null, where, null, null); 
     if (bdc.getCount() > 0) { 
      while (bdc.moveToNext()) { 
       String birthday = bdc.getString(0); 
       Toast.makeText(getApplicationContext(), id+name+birthday, Toast.LENGTH_SHORT); 
      } 
     } 
    } 
} 
cur.close(); 

इस तरह मैं हर एक संपर्क के लिए जन्मदिन घटना को पढ़ने की कोशिश की है। लेकिन जाहिर है यह अभी तक काम नहीं करता है। तो मैं संपर्क की जन्म तिथि को सही तरीके से कैसे पढ़ सकता हूं?

उत्तर

22

शब्द: कुछ OEM के लिए अपने स्वयं के संपर्क प्रदाता (नहीं मानक Android) और प्रदान मानक Android प्रक्रियाओं का पालन नहीं कर सकते।

// method to get name, contact id, and birthday 
private Cursor getContactsBirthdays() { 
    Uri uri = ContactsContract.Data.CONTENT_URI; 

    String[] projection = new String[] { 
      ContactsContract.Contacts.DISPLAY_NAME, 
      ContactsContract.CommonDataKinds.Event.CONTACT_ID, 
      ContactsContract.CommonDataKinds.Event.START_DATE 
    }; 

    String where = 
      ContactsContract.Data.MIMETYPE + "= ? AND " + 
      ContactsContract.CommonDataKinds.Event.TYPE + "=" + 
      ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY; 
    String[] selectionArgs = new String[] { 
     ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE 
    }; 
    String sortOrder = null; 
    return managedQuery(uri, projection, where, selectionArgs, sortOrder); 
} 

// iterate through all Contact's Birthdays and print in log 
Cursor cursor = getContactsBirthdays(); 
int bDayColumn = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Event.START_DATE); 
while (cursor.moveToNext()) { 
    String bDay = cursor.getString(bDayColumn); 
    Log.d(TAG, "Birthday: " + bDay); 
} 

अगर यह काम नहीं करता, तो आप एक OEM संपर्क संशोधित हो सकता है: उदाहरण के लिए, com.android.providers.contacts.HtcContactsProvider2 पर मेरे एचटीसी डिजायर एचडी

यहाँ प्रश्नों का जवाब एक ही रास्ता है प्रदाता।

+0

धन्यवाद! आप इस प्रश्न को भी जोड़ सकते थे;) http://stackoverflow.com/questions/7376980/android-2-2-contact-birthday-date – caw

1
ContentResolver cr = getContentResolver(); 
String where = Data.raw_contacts_id + " = your_id and " + Data.MIMETYPE + " = " + CommonDataKinds.Events.CONTENT_ITEM_TYPE; 
cr.query(ContactsContract.Data.CONTENT_URI, null, where, null, null); 

मैंने कोड का परीक्षण नहीं किया है क्योंकि मैंने अपने कंप्यूटर में एसडीके इंस्टॉल नहीं किया है। लेकिन मेरा मानना ​​है कि इसे काम करना चाहिए।
आशा है कि इससे आपको कुछ असर में मदद मिलेगी।

+1

धन्यवाद! मैंने आपके स्निपेट को मेरे प्रश्न में कोड जोड़ा। क्या यह आप इसका मतलब था? – caw

+0

क्या आपने मेरी स्निपेट की कोशिश की है? मैंने सोचा कि यह काम करना चाहिए। –

+0

हां, मैंने कोशिश की। और दुर्भाग्य से, यह काम नहीं करता है (अभी तक)। यह संपर्कों के बाहरी लूप के माध्यम से जाता है लेकिन जन्मदिन के आंतरिक पाश में केवल एक बार (स्ट्रिंग जन्मदिन = bdc.getString (0))। और जिस संपर्क के लिए यह आंतरिक लूप में प्रवेश करता है उसका कोई जन्मदिन सेट नहीं होता है। – caw

2

एक निम्न कोड के साथ सभी उपयोगकर्ताओं की जन्मदिन बाहर पढ़ सकते हैं:

ContentResolver cr = getContentResolver(); 
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); 
if (cur.getCount() > 0) { 
    while (cur.moveToNext()) { 
     String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     ContentResolver bd = getContentResolver(); 
     Cursor bdc = bd.query(android.provider.ContactsContract.Data.CONTENT_URI, new String[] { Event.DATA }, android.provider.ContactsContract.Data.CONTACT_ID+" = "+id+" AND "+Data.MIMETYPE+" = '"+Event.CONTENT_ITEM_TYPE+"' AND "+Event.TYPE+" = "+Event.TYPE_BIRTHDAY, null, android.provider.ContactsContract.Data.DISPLAY_NAME); 
     if (bdc.getCount() > 0) { 
      while (bdc.moveToNext()) { 
       String birthday = bdc.getString(0); 
       // now "id" is the user's unique ID, "name" is his full name and "birthday" is the date and time of his birth 
      } 
     } 
    } 
} 
cur.close(); 

लेकिन वहाँ किसी भी बेहतर या कम यह करने के लिए तरीका है? सावधानी के

संबंधित मुद्दे