इस लेसन में, नया संपर्क जोड़ने के लिए Intent
का इस्तेमाल करने का तरीका या
संपर्क के डेटा को संशोधित करें. सीधे संपर्कों की जानकारी देने वाली सेवा को ऐक्सेस करने के बजाय, कोई
Intent
संपर्कों का ऐप्लिकेशन शुरू करता है. यह ऐप्लिकेशन, सही
Activity
चलाता है. इस लेसन में बताई गई बदलाव की कार्रवाइयों के लिए,
अगर बढ़ाया गया डेटा Intent
में भेजा जाता है, तो वह
Activity
शुरू हो गया है.
किसी एक संपर्क को शामिल करने या अपडेट करने के लिए, Intent
का इस्तेमाल करने को प्राथमिकता दी जाती है
संपर्क सूची में बदलाव करने का तरीका नीचे बताया गया है:
- इससे आपका अपना यूआई और कोड बनाने में लगने वाला समय और मेहनत बचता है.
- यह ऐसे बदलावों की वजह से होने वाली गड़बड़ियों से बचाता है जो संपर्क सेवा देने वाले के नियम.
- इससे उन अनुमतियों की संख्या कम हो जाती है जिनका आपको अनुरोध करना पड़ता है. आपके ऐप्लिकेशन को संपर्कों की जानकारी देने वाली सेवा को लिखने की अनुमति की ज़रूरत नहीं है, क्योंकि यह बदलावों को संपर्कों के ऐप्लिकेशन को सौंपता है.
इंटेंट का इस्तेमाल करके नया संपर्क शामिल करना
जब आपके ऐप्लिकेशन को नया डेटा मिलता है, तो अक्सर आपको उपयोगकर्ता को नया संपर्क डालने की अनुमति देनी होती है. उदाहरण के लिए, रेस्टोरेंट की समीक्षा करने वाला ऐप्लिकेशन, उपयोगकर्ताओं को रेस्टोरेंट की समीक्षा करते समय उसे कॉन्टैक्ट के तौर पर जोड़ने की अनुमति दे सकता है. इंटेंट का इस्तेमाल करके ऐसा करने के लिए, आपके पास मौजूद ज़्यादा से ज़्यादा डेटा का इस्तेमाल करके इंटेंट बनाएं उपलब्ध और फिर संपर्क ऐप्लिकेशन पर इंटेंट भेजें.
संपर्क ऐप्लिकेशन का इस्तेमाल करके कोई संपर्क शामिल करने पर, संपर्क में नया रॉ संपर्क शामिल हो जाता है
सेवा देने वाली कंपनी की ContactsContract.RawContacts
टेबल. ज़रूरत पड़ने पर,
संपर्क ऐप्लिकेशन, उपयोगकर्ताओं से रॉ संपर्क बनाते समय, खाते के टाइप और इस्तेमाल किए जाने वाले खाते के बारे में पूछता है. अगर रॉ संपर्क पहले से मौजूद है, तो संपर्क ऐप्लिकेशन भी उपयोगकर्ताओं को इसकी सूचना देता है. इसके बाद, उपयोगकर्ताओं के पास
कॉन्टैक्ट जोड़ने की प्रोसेस को रद्द करने का विकल्प होता है. ऐसा करने पर, कोई कॉन्टैक्ट नहीं बनता. रॉ संपर्कों के बारे में ज़्यादा जानने के लिए, संपर्कों की जानकारी देने वाली कंपनी के एपीआई की गाइड देखें.
इंटेंट बनाएं
शुरू करने के लिए, कार्रवाई
Intents.Insert.ACTION
के साथ नया Intent
ऑब्जेक्ट बनाएं.
MIME टाइप को RawContacts.CONTENT_TYPE
पर सेट करें. उदाहरण के लिए:
Kotlin
... // Creates a new Intent to insert a contact val intent = Intent(ContactsContract.Intents.Insert.ACTION).apply { // Sets the MIME type to match the Contacts Provider type = ContactsContract.RawContacts.CONTENT_TYPE }
Java
... // Creates a new Intent to insert a contact Intent intent = new Intent(ContactsContract.Intents.Insert.ACTION); // Sets the MIME type to match the Contacts Provider intent.setType(ContactsContract.RawContacts.CONTENT_TYPE);
अगर आपके पास संपर्क की जानकारी पहले से ही है, जैसे कि फ़ोन नंबर या ईमेल पता, तो
उन्हें इंटेंट में बढ़ाए गए डेटा के तौर पर डाला जा सकता है. मुख्य वैल्यू के लिए, वैल्यू के तौर पर सही कॉन्स्टेंट का इस्तेमाल करें
Intents.Insert
. संपर्क ऐप्लिकेशन
डेटा को अपनी इंसर्ट स्क्रीन में दिखाता है, जिससे उपयोगकर्ता उसमें और बदलाव कर सकते हैं और कुछ जोड़ सकते हैं.
Kotlin
private var emailAddress: EditText? = null private var phoneNumber: EditText? = null ... /* Assumes EditText fields in your UI contain an email address * and a phone number. * */ emailAddress = findViewById(R.id.email) phoneNumber = findViewById(R.id.phone) ... /* * Inserts new data into the Intent. This data is passed to the * contacts app's Insert screen */ intent.apply { // Inserts an email address putExtra(ContactsContract.Intents.Insert.EMAIL, emailAddress?.text) /* * In this example, sets the email type to be a work email. * You can set other email types as necessary. */ putExtra( ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK ) // Inserts a phone number putExtra(ContactsContract.Intents.Insert.PHONE, phoneNumber?.text) /* * In this example, sets the phone type to be a work phone. * You can set other phone types as necessary. */ putExtra( ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK ) }
Java
private EditText emailAddress = null; private EditText phoneNumber = null; ... /* Assumes EditText fields in your UI contain an email address * and a phone number. * */ emailAddress = (EditText) findViewById(R.id.email); phoneNumber = (EditText) findViewById(R.id.phone); ... /* * Inserts new data into the Intent. This data is passed to the * contacts app's Insert screen */ // Inserts an email address intent.putExtra(ContactsContract.Intents.Insert.EMAIL, emailAddress.getText()) /* * In this example, sets the email type to be a work email. * You can set other email types as necessary. */ .putExtra(ContactsContract.Intents.Insert.EMAIL_TYPE, ContactsContract.CommonDataKinds.Email.TYPE_WORK) // Inserts a phone number .putExtra(ContactsContract.Intents.Insert.PHONE, phoneNumber.getText()) /* * In this example, sets the phone type to be a work phone. * You can set other phone types as necessary. */ .putExtra(ContactsContract.Intents.Insert.PHONE_TYPE, ContactsContract.CommonDataKinds.Phone.TYPE_WORK);
Intent
बनाने के बाद, इसे भेजने के लिए
startActivity()
को कॉल करें.
Kotlin
/* Sends the Intent */ startActivity(intent)
Java
/* Sends the Intent */ startActivity(intent);
इस कॉल से, संपर्कों वाले ऐप्लिकेशन में एक स्क्रीन खुलती है. इस स्क्रीन पर, उपयोगकर्ता नया संपर्क जोड़ सकते हैं. कॉन्टेंट बनाने संपर्क का खाता टाइप और खाते का नाम, स्क्रीन पर सबसे ऊपर दिखेगा. उपयोगकर्ताओं के एक बार डेटा डालें और हो गया पर क्लिक करें, संपर्क ऐप्लिकेशन की संपर्क सूची दिखाई देगी. उपयोगकर्ता इस पर वापस लौटें वापस जाएं पर क्लिक करके अपना ऐप्लिकेशन खोलें.
इंटेंट का इस्तेमाल करके, किसी मौजूदा संपर्क में बदलाव करना
Intent
का इस्तेमाल करके मौजूदा संपर्क में बदलाव करना तब फ़ायदेमंद होता है, जब उपयोगकर्ता
ने पहले ही रुचि का संपर्क चुन लिया है. उदाहरण के लिए, ऐसा ऐप्लिकेशन जिसे ऐसे संपर्क मिलते हैं जिनमें
डाक पते, लेकिन पोस्टल कोड न होने की वजह से, उपयोगकर्ताओं को कोड देखने का विकल्प मिल सकता है और
फिर इसे संपर्क में जोड़ें.
इंटेंट का इस्तेमाल करके किसी मौजूदा संपर्क में बदलाव करने के लिए, इससे मिलती-जुलती प्रक्रिया का इस्तेमाल करें
संपर्क शामिल किया जा रहा है. सेक्शन में बताए गए तरीके से इंटेंट बनाएं
इंटेंट का इस्तेमाल करके नया संपर्क शामिल करें, लेकिन संपर्क के
Contacts.CONTENT_LOOKUP_URI
और MIME टाइप
इंटेंट के लिए Contacts.CONTENT_ITEM_TYPE
. अगर आपको पहले से मौजूद जानकारी में बदलाव करना है, तो उसे इंटेंट के एक्सटेंडेड डेटा में डाला जा सकता है. ध्यान दें कि कुछ
इंटेंट का इस्तेमाल करके नाम वाले कॉलम में बदलाव नहीं किया जा सकता; ये कॉलम सारांश में मौजूद हैं
ContactsContract.Contacts
क्लास के लिए, एपीआई रेफ़रंस का सेक्शन
"अपडेट करें" पर क्लिक करें.
आखिर में, इंटेंट भेजें. इसके जवाब में, संपर्क ऐप्लिकेशन में बदलाव करने की स्क्रीन दिखती है. जब उपयोगकर्ता बदलाव कर लेता है और उन्हें सेव कर लेता है, तो संपर्क ऐप्लिकेशन में संपर्क सूची दिखती है. जब उपयोगकर्ता वापस जाएं पर क्लिक करता है, तो आपका ऐप्लिकेशन दिखता है.
इंटेंट बनाना
संपर्क में बदलाव करने के लिए, Intent(action)
को इस नंबर पर कॉल करें
ACTION_EDIT
कार्रवाई के साथ एक इंटेंट बनाएं. setDataAndType()
को कॉल करके, Contacts.CONTENT_LOOKUP_URI
के लिए इंटेंट की डेटा वैल्यू और Contacts.CONTENT_ITEM_TYPE
के लिए MIME टाइप सेट करें. ऐसा इसलिए, क्योंकि setType()
को कॉल करने पर, Intent
की मौजूदा डेटा वैल्यू बदल जाती है. इसलिए, आपको डेटा और MIME टाइप को एक साथ सेट करना होगा.
किसी संपर्क का Contacts.CONTENT_LOOKUP_URI
पाने के लिए, कॉल करें
संपर्क के Contacts.getLookupUri(id, lookupkey)
Contacts._ID
और
Contacts.LOOKUP_KEY
मान इस रूप में
आर्ग्युमेंट.
ध्यान दें: किसी संपर्क की
LOOKUP_KEY
मान है
किसी संपर्क को फिर से पाने के लिए इस्तेमाल किया जाने वाला आइडेंटिफ़ायर. यह आईडी कभी नहीं बदलता,
भले ही सेवा देने वाली कंपनी, इंटरनल ऑपरेशन को मैनेज करने के लिए, संपर्क की लाइन आईडी में बदलाव करे.
नीचे दिए गए स्निपेट में, इंटेंट बनाने का तरीका बताया गया है:
Kotlin
// The Cursor that contains the Contact row var mCursor: Cursor? = null // The index of the lookup key column in the cursor var lookupKeyIndex: Int = 0 // The index of the contact's _ID value var idIndex: Int = 0 // The lookup key from the Cursor var currentLookupKey: String? = null // The _ID value from the Cursor var currentId: Long = 0 // A content URI pointing to the contact var selectedContactUri: Uri? = null ... /* * Once the user has selected a contact to edit, * this gets the contact's lookup key and _ID values from the * cursor and creates the necessary URI. */ mCursor?.apply { // Gets the lookup key column index lookupKeyIndex = getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY) // Gets the lookup key value currentLookupKey = getString(lookupKeyIndex) // Gets the _ID column index idIndex = getColumnIndex(ContactsContract.Contacts._ID) currentId = getLong(idIndex) selectedContactUri = ContactsContract.Contacts.getLookupUri(currentId, mCurrentLookupKey) } // Creates a new Intent to edit a contact val editIntent = Intent(Intent.ACTION_EDIT).apply { /* * Sets the contact URI to edit, and the data type that the * Intent must match */ setDataAndType(selectedContactUri, ContactsContract.Contacts.CONTENT_ITEM_TYPE) }
Java
// The Cursor that contains the Contact row public Cursor mCursor; // The index of the lookup key column in the cursor public int lookupKeyIndex; // The index of the contact's _ID value public int idIndex; // The lookup key from the Cursor public String currentLookupKey; // The _ID value from the Cursor public long currentId; // A content URI pointing to the contact Uri selectedContactUri; ... /* * Once the user has selected a contact to edit, * this gets the contact's lookup key and _ID values from the * cursor and creates the necessary URI. */ // Gets the lookup key column index lookupKeyIndex = mCursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY); // Gets the lookup key value currentLookupKey = mCursor.getString(lookupKeyIndex); // Gets the _ID column index idIndex = mCursor.getColumnIndex(ContactsContract.Contacts._ID); currentId = mCursor.getLong(idIndex); selectedContactUri = Contacts.getLookupUri(currentId, mCurrentLookupKey); ... // Creates a new Intent to edit a contact Intent editIntent = new Intent(Intent.ACTION_EDIT); /* * Sets the contact URI to edit, and the data type that the * Intent must match */ editIntent.setDataAndType(selectedContactUri, ContactsContract.Contacts.CONTENT_ITEM_TYPE);
नेविगेशन फ़्लैग जोड़ना
Android 4.0 (एपीआई वर्शन 14) और इसके बाद के वर्शन में, संपर्क ऐप्लिकेशन में कोई समस्या होने पर, नेविगेशन गलत तरीके से काम करता है. जब आपका ऐप्लिकेशन, संपर्क ऐप्लिकेशन को कोई बदलाव करने का इंटेंट भेजता है और उपयोगकर्ता संपर्क करते हैं, तो वापस जाएं क्लिक करने पर उन्हें संपर्क सूची स्क्रीन दिखाई देती है. आपके ऐप्लिकेशन पर वापस जाने के लिए, उपयोगकर्ता को हाल ही में इस्तेमाल किए गए ऐप्लिकेशन पर क्लिक करके, आपका ऐप्लिकेशन चुनना होगा.
Android 4.0.3 (एपीआई वर्शन 15) और उसके बाद के वर्शन में इस समस्या को हल करने के लिए, true
की वैल्यू के साथ, इंटेंट में एक्सटेंडेड डेटा बटन finishActivityOnSaveCompleted
जोड़ें.
Android 4.0 से पहले के वर्शन, इस पासकोड को स्वीकार करते हैं. हालांकि, इसका कोई असर नहीं पड़ता. सेट करने के लिए
तो ये काम करें:
Kotlin
// Sets the special extended data for navigation editIntent.putExtra("finishActivityOnSaveCompleted", true)
Java
// Sets the special extended data for navigation editIntent.putExtra("finishActivityOnSaveCompleted", true);
अन्य एक्सटेंडेड डेटा जोड़ें
Intent
में ज़्यादा समय तक डेटा जोड़ने के लिए, इस नंबर पर कॉल करें
ज़रूरत के हिसाब से putExtra()
.
यहां दी गई मुख्य वैल्यू का इस्तेमाल करके, सामान्य संपर्क फ़ील्ड के लिए एक्सटेंडेड डेटा जोड़ा जा सकता है
Intents.Insert
. ध्यान रखें कि ContactsContract.Contacts
टेबल के कुछ कॉलम में बदलाव नहीं किया जा सकता.
क्लास के लिए, एपीआई रेफ़रंस के खास जानकारी वाले सेक्शन में ये कॉलम मौजूद हैं
ContactsContract.Contacts
पर जाएं.
इंटेंट भेजना
आखिर में, बनाया गया इंटेंट भेजें. उदाहरण के लिए:
Kotlin
// Sends the Intent startActivity(editIntent)
Java
// Sends the Intent startActivity(editIntent);
उपयोगकर्ताओं को किसी इंटेंट का इस्तेमाल करके, जानकारी डालने या उसमें बदलाव करने का विकल्प दें
उपयोगकर्ताओं को यह चुनने की अनुमति दी जा सकती है कि वे संपर्क को शामिल करें या किसी मौजूदा संपर्क में बदलाव करें
कार्रवाई के साथ Intent
ACTION_INSERT_OR_EDIT
. उदाहरण के लिए, ईमेल क्लाइंट ऐप्लिकेशन की मदद से, उपयोगकर्ताओं को नए संपर्क में ईमेल पता जोड़ने या किसी मौजूदा संपर्क में अतिरिक्त पता जोड़ने की अनुमति मिल सकती है. इस इंटेंट के लिए MIME प्रकार को
Contacts.CONTENT_ITEM_TYPE
,
लेकिन डेटा यूआरआई सेट न करें.
इस इंटेंट को भेजने पर, Contacts ऐप्लिकेशन संपर्कों की एक सूची दिखाता है.
उपयोगकर्ता, नया संपर्क जोड़ सकते हैं या किसी मौजूदा संपर्क को चुनकर उसमें बदलाव कर सकते हैं.
इंटेंट में जोड़े गए एक्सटेंडेड डेटा फ़ील्ड, स्क्रीन पर दिखते हैं. Google Analytics 4 पर माइग्रेट करने के लिए,
Intents.Insert
में दी गई कोई भी कुंजी वैल्यू. नीचे दिए गए कोड स्निपेट में, इंटेंट बनाने और उसे भेजने का तरीका बताया गया है:
Kotlin
// Creates a new Intent to insert or edit a contact val intentInsertEdit = Intent(Intent.ACTION_INSERT_OR_EDIT).apply { // Sets the MIME type type = ContactsContract.Contacts.CONTENT_ITEM_TYPE } // Add code here to insert extended data, if desired // Sends the Intent with an request ID startActivity(intentInsertEdit)
Java
// Creates a new Intent to insert or edit a contact Intent intentInsertEdit = new Intent(Intent.ACTION_INSERT_OR_EDIT); // Sets the MIME type intentInsertEdit.setType(ContactsContract.Contacts.CONTENT_ITEM_TYPE); // Add code here to insert extended data, if desired ... // Sends the Intent with an request ID startActivity(intentInsertEdit);