2012-01-09 12 views
18

मैं मौजूदा संपर्क पर जानकारी का एक टुकड़ा डालने और अपडेट करने का प्रयास कर रहा हूं इसलिए मैंने कार्यक्षमता विकसित करने के लिए नमूना अनुप्रयोग बनाया है। मैं चाहता हूं कि मेरा नमूना ऐप करना है (या यदि मौजूद है) संपर्क में एक ईमेल पता अपडेट करना है।संपर्क जानकारी संशोधित करना

मैं तो जैसे प्रणाली आशय के माध्यम से संपर्क चुनकर हूँ:

startActivityForResult(new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI), PICK_CONTACT_REQUEST); 

यूआरआई जो दिया जाता है Contact का है जो चुनी है और इस रूप में आता है किया गया था (RawContact?): content://com.android.contacts/contacts/lookup/0r2-2A90214945/2

मैं निम्नलिखित कोड का प्रदर्शन करके इस पर Data (RawContact?) आइटम के पीछे सब खींच सकते हैं: इस से

Cursor cursor = contentResolver.query(mContactUri, null, null, null, null); 
try { 
    if (cursor.moveToFirst()) { 
     for(int i=0; i < cursor.getColumnCount(); i++) { 
      String message = cursor.getColumnName(i); 
      Log.v("", message); 
     } 
    } 
} finally { 
    cursor.close(); 
} 

मैं अगर संपर्क पहले से ही एक CommonDataTypes.EmailData सदस्य है निर्धारित करने के लिए सक्षम होना चाहिए:

cursor.getColumnIndex(CommonDataKinds.Email.CONTENT_ITEM_TYPE) != -1; 

और फिर या तो Insert या UpdateData के लिए निम्न में से एक कार्य करें:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>(); 

ops.add(ContentProviderOperation.newInsert(mContactUri) 
    .withValue(Data.MIMETYPE, Email.CONTENT_ITEM_TYPE) 
    .withValue(Email.DISPLAY_NAME, "[email protected]") 
    .withValue(Email.TYPE, Email.TYPE_HOME) 
    .build()); 
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops); 

लेकिन यह मुझे एक अपवाद देता है: java.lang.UnsupportedOperationException: URI: content://com.android.contacts/contacts/lookup/0r2-2A90314945/2, calling user:

उम्मीद है कि किसी को देख सकते हैं कि मैं क्या नहीं छूटा है।

पुनश्च, मैं इन अनुमतियों का उपयोग कर रहा:

<uses-permission android:name="android.permission.READ_CONTACTS" /> 
<uses-permission android:name="android.permission.WRITE_CONTACTS" /> 
+0

ठीक है, मैं इसे हटा दूंगा। धन्यवाद –

उत्तर

43

एंड्रॉयड लोग अपने documentation अपडेट करना होगा। यह वास्तव में मुझे अनुमान लगाने के लिए कम के बारे में जानने के लिए काम करता था। यह सुझाव देता है कि आप Contact वापस खींच सकते हैं, जिसमें RawContacts होगा जिसमें Data होगा।

यह व्याख्या पूरी तरह से गलत है।

ContactContract टेबल्स

तालिका:: Contacts

पहुँच यूआरआई: Contacts.CONTENT_URI

प्राथमिक कुंजी **: Data._ID

ContactContracts डेटा के बजाय तीन सामान्य औसत हर रोज डेटाबेस तालिकाओं * है

विवरण:

इस तालिका में एक संपर्क के बारे में जानकारी शामिल है (इसे कब जोड़ा गया था, यह उपयोगकर्ता आइकन क्या है, क्या इसमें कस्टम रिंगटोन है)।

रिलेशनशिप: RawContact तालिका के साथ इसका 1-से-कई संबंध हैं।

तालिका: RawContacts

पहुँच यूआरआई: RawContacts.CONTENT_URI

प्राथमिक कुंजी: Data._ID

विदेशी कुंजी **: Data.CONTACT_ID

विवरण:

इस तालिका में डेटा आइटम के संबंधित सेट के बारे में जानकारी है। एक रॉकॉन्टैक्ट में ईमेल प्रकार, ईमेल डिस्प्ले नाम, फोन नंबर, फोन डिस्प्ले नाम इत्यादि शामिल हो सकते हैं। उपयोगकर्ता को इसे देखकर Contact बनाने के लिए अन्य कच्चे संपर्कों के साथ एक रॉकॉन्टैक्ट को एकत्रित किया जा सकता है। एक संपर्क में केवल एक रॉकॉन्टैक्ट हो सकता है।

रिलेशनशिप: Data तालिका के साथ इसका 1-से-कई संबंध हैं।

तालिका: Data

पहुँच यूआरआई: Data.CONTENT_URI

प्राथमिक कुंजी: Data._ID

विदेशी कुंजी: Data.RAW_CONTACT_ID

विवरण:

इस तालिका में जानकारी का एक क्षेत्र शामिल है। एक ईमेल पता, एक फोन नंबर, एक फोन नंबर का प्रकार (घर/काम), एक उपनाम, एक प्रदर्शन नाम।

जवाब में सवाल

मैं क्रम में GitHub करने के लिए पूरे नमूना परियोजना अपलोड कर दिया है दूसरों को क्वेरी करने के लिए कैसे अद्यतन और ContactContract का उपयोग कर रिकॉर्ड डालने को देखने के लिए अनुमति देने के लिए करने के लिए

आप यहाँ डाउनलोड करने के लिए परियोजना पा सकते हैं: https://github.com/gwoodhouse/ContactContractSample/blob/master/ContactsIntegration/src/com/woodhouse/example/activity/ContactsIntegrationActivity.java

आशा इस: https://github.com/gwoodhouse/ContactContractSample

तुम सिर्फ जानकारी/अपडेट के जावा कोड को देखने के लिए चाहते हैं/यहाँ सम्मिलित वर्ग फ़ाइल है मदद करता है!

* कोई तालिका, लेकिन एक ContentProvider

** सख्ती से सच नहीं।

+0

अपने कथन का हवाला देते हुए: "एक संपर्क में केवल एक रॉकंटैक्ट हो सकता है" ... मुझे लगता है कि एक संपर्क कई कच्चे संपर्कों का संयोजन है। अगर मैं ग़लत हूं तो मेरी गलती सुझाएं। –

+0

(यह थोड़ी देर हो गया है) लेकिन मुझे लगता है कि 'संपर्क' में केवल एक ही 'रॉकॉन्टैक्ट' हो सकता है और अभी भी मान्य हो सकता है। – Graeme

+1

हां, लेकिन यह अभी भी मान्य होगा यदि इसमें कई कच्चे संपर्क हैं। हालांकि हालांकि परियोजना के लिए धन्यवाद। –