ऐप्लिकेशन, उपयोगकर्ताओं को संपर्क बनाने और उन्हें सेव करने की अनुमति दे सकते हैं. आम तौर पर, इन संपर्कों को दो जगहों पर सेव किया जा सकता है:
- क्लाउड खाता: संपर्कों को क्लाउड सेवा (जैसे, 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
के साथ-साथ अन्य राज्यों के लिए भी शून्य होगी.
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());
ऑपरेशन की सूची में अन्य 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
ऑब्जेक्ट जोड़ें, ताकि संपर्क फ़ील्ड शामिल किए जा सकें. साथ ही, संपर्क बनाने के लिए एक साथ कई ऑपरेशन चलाएं.