ऐप्लिकेशन, लोगों को संपर्क बनाने और उन्हें सेव करने की अनुमति दे सकते हैं. इन संपर्कों को आम तौर पर दो जगहों पर सेव किया जा सकता है:
- क्लाउड खाता: संपर्कों को क्लाउड सेवा (जैसे, Google Cloud) से जुड़े खाते में सेव करें, ताकि संपर्कों को सिंक और उनका बैकअप लिया जा सके.
- लोकल खाता: संपर्कों को डिवाइस पर सेव किया जा सकता है.
उपयोगकर्ता, डिवाइस की सेटिंग में जाकर अपनी पसंद के हिसाब से स्टोरेज की जगह सेट कर सकते हैं. इस पसंदीदा जगह को डिफ़ॉल्ट खाता कहा जाता है. इसका इस्तेमाल संपर्क बनाते समय किया जाता है. ऐप्लिकेशन को इस प्राथमिकता का पालन करना चाहिए. इस दस्तावेज़ में, संपर्क जानकारी सेव करने की अलग-अलग जगहों के बारे में बताया गया है. इनमें क्लाउड खाते और लोकल खाते शामिल हैं. साथ ही, इसमें उपयोगकर्ता की प्राथमिकताओं को मैनेज करने के लिए सबसे सही तरीके बताए गए हैं. लोकल खाते का मतलब है कि डिवाइस पर सीधे तौर पर संपर्क सेव किए जाते हैं.
डिफ़ॉल्ट खाता वापस पाना
नए संपर्कों के लिए डिफ़ॉल्ट खाता तय करने के लिए, ContactsContract.RawContacts.DefaultAccount
का इस्तेमाल करें
ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
ऑब्जेक्ट पाने के लिए, getDefaultAccountForNewContacts()
को कॉल करें. इस ऑब्जेक्ट में, खाते की डिफ़ॉल्ट सेटिंग के बारे में जानकारी होती है.
Kotlin
import ContactsContrast.RawContacts
import ContactsContrast.RawContacts.DefaultAccount
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
val defaultAccountAndState: DefaultAccountAndState =
DefaultAccount.getDefaultAccountForNewContacts(
getContentResolver()
)
Java
import ContactsContrast.RawContacts;
import ContactsContrast.RawContacts.DefaultAccount;
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState;
DefaultAccountAndState defaultAccountAndState =
DefaultAccount.getDefaultAccountForNewContacts(
getContentResolver()
);
DefaultAccountAndState
ऑब्जेक्ट में ये शामिल हैं:
- स्टेट: इससे पता चलता है कि कोई डिफ़ॉल्ट खाता सेट किया गया है या नहीं. अगर सेट किया गया है, तो उस खाते की कैटगरी (क्लाउड, लोकल या सिम) के बारे में पता चलता है.
- खाता: अगर स्थिति
DEFAULT_ACCOUNT_STATE_CLOUD or DEFAULT_ACCOUNT_STATE_SIM
है, तो इससे खाते की जानकारी (नाम और टाइप) मिलती है.DEFAULT_ACCOUNT_STATE_LOCAL
के साथ-साथ अन्य राज्यों के लिए, इसकी वैल्यू null होगी.
यहां DefaultAccountAndState
ऑब्जेक्ट को पार्स करने का एक उदाहरण दिया गया है:
Kotlin
// Retrieves the state of default account.
val defaultAccountState = defaultAccountAndState.state
var defaultAccountName: String? = null
var defaultAccountType: String? = null
when (defaultAccountState) {
// Default account is set to a cloud or a SIM account.
DefaultAccountState.DEFAULT_ACCOUNT_STATE_CLOUD,
DefaultAccountState.DEFAULT_ACCOUNT_STATE_SIM -> {
defaultAccountName = defaultAccountAndState.account?.name
defaultAccountType = defaultAccountAndState.account?.type
}
// Default account is set to the local account on the device.
DefaultAccountState.DEFAULT_ACCOUNT_STATE_LOCAL -> {
defaultAccountName = RawContacts.getLocalAccountType()
defaultAccountType = RawContacts.getLocalAccountName()
}
// Default account is not set.
DefaultAccountState.DEFAULT_ACCOUNT_STATE_NOT_SET -> {
}
}
Java
// Retrieves the state of default account.
var defaultAccountState = defaultAccountAndState.getState();
String defaultAccountName = null;
String defaultAccountType = null;
switch (defaultAccountState) {
// Default account is set to a cloud or a SIM account.
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_CLOUD:
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_SIM:
defaultAccountName = defaultAccountAndState.getAccount().name;
defaultAccountType = defaultAccountAndState.getAccount().type;
break;
// Default account is set to the local account on the device.
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_LOCAL:
defaultAccountName = RawContacts.getLocalAccountType();
defaultAccountType = RawContacts.getLocalAccountName();
break;
// Default account is not set.
case DefaultAccountState.DEFAULT_ACCOUNT_STATE_NOT_SET:
break;
}
खाता तय किए बिना संपर्क बनाना
डिफ़ॉल्ट खाता सेट होने पर, संपर्क बनाते समय आपके ऐप्लिकेशन को आम तौर पर किसी खाते के बारे में साफ़ तौर पर बताने की ज़रूरत नहीं होती. सिस्टम, नए संपर्क को डिफ़ॉल्ट खाते में अपने-आप सेव कर देता है. यहाँ खाता तय किए बिना संपर्क बनाने का तरीका बताया गया है.
ContentProviderOperation
ऑब्जेक्ट का नया ArrayList
बनाएं. इस सूची में, रॉ संपर्क और उससे जुड़े डेटा को डालने के लिए कार्रवाइयां शामिल होती हैं.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
रॉ संपर्क डालने के लिए, नया ContentProviderOperation
बनाएं. आपने कोई खाता नहीं चुना है. इसलिए, आपको ACCOUNT_TYPE
और ACCOUNT_NAME
को शामिल करने की ज़रूरत नहीं है.
Kotlin
val op = ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
ops.add(op.build())
Java
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
);
ops.add(op.build());
संपर्क फ़ील्ड (जैसे कि नाम, फ़ोन नंबर, ईमेल) शामिल करने के लिए, ops सूची में अन्य ContentProviderOperation
ऑब्जेक्ट जोड़ें. इसके बाद, संपर्क बनाने के लिए बैच ऑपरेशन लागू करें.
Kotlin
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
)
} catch (e: Exception) {
// Handle exceptions
}
Java
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
);
} catch (Exception e) {
// Handle exceptions
}
क्लाउड खाते में संपर्क बनाना
क्लाउड खाते में संपर्क बनाने के लिए, रॉ कॉन्टैक्ट की लाइन को ContactsContract.RawContacts
टेबल में डालें और क्लाउड खाते की जानकारी दें. इसके लिए, यह तरीका अपनाएं:
ContentProviderOperation
ऑब्जेक्ट का नया ArrayList
बनाएं.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
रॉ संपर्क डालने के लिए, नया ContentProviderOperation
बनाएं. चुने गए क्लाउड खाते का टाइप और नाम तय करने के लिए, withValue()
तरीके का इस्तेमाल करें.
Kotlin
val op = ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
selectedAccount.type
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
selectedAccount.name
)
ops.add(op.build())
Java
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
selectedAccount.getType()
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
selectedAccount.getName()
);
ops.add(op.build());
संपर्क फ़ील्ड शामिल करने के लिए, ऑपरेशंस की सूची में अन्य ContentProviderOperation
ऑब्जेक्ट जोड़ें. इसके बाद, संपर्क बनाने के लिए बैच ऑपरेशन लागू करें.
लोकल खाते में संपर्क बनाना
लोकल खाते में संपर्क बनाने के लिए, ContactsContract.RawContacts
टेबल में नई रॉ संपर्क लाइन डालें. साथ ही, लोकल खाते के लिए खाते की जानकारी दें:
ContentProviderOperation
ऑब्जेक्ट का नया ArrayList
बनाएं.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
रॉ संपर्क डालने के लिए, नया ContentProviderOperation
बनाएं. लोकल खाते की जानकारी देने के लिए, ContactsContract.RawContacts.getLocalAccountName()
और ContactsContract.RawContacts.getLocalAccountType()
का इस्तेमाल करें.
Kotlin
val op = ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
ContactsContract.RawContacts.getLocalAccountType()
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
ContactsContract.RawContacts.getLocalAccountName()
)
ops.add(op.build())
Java
ContentProviderOperation.Builder op =
ContentProviderOperation.newInsert(
ContactsContract.RawContacts.CONTENT_URI
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_TYPE,
ContactsContract.RawContacts.getLocalAccountType()
)
.withValue(
ContactsContract.RawContacts.ACCOUNT_NAME,
ContactsContract.RawContacts.getLocalAccountName()
);
ops.add(op.build());
संपर्क फ़ील्ड शामिल करने के लिए, ऑपरेशंस की सूची में अन्य ContentProviderOperation
ऑब्जेक्ट जोड़ें. इसके बाद, संपर्क बनाने के लिए बैच ऑपरेशन लागू करें.