संपर्कों को सेव करने की जगहें मैनेज करना

ऐप्लिकेशन, उपयोगकर्ताओं को संपर्क बनाने और उन्हें सेव करने की अनुमति दे सकते हैं. आम तौर पर, इन संपर्कों को दो जगहों पर सेव किया जा सकता है:

  1. क्लाउड खाता: संपर्कों को क्लाउड सेवा (जैसे, Google Cloud) से जुड़े खाते में सेव करें, ताकि संपर्कों को सिंक और बैक अप किया जा सके.
  2. स्थानीय खाता: संपर्कों को डिवाइस पर सेव किया जा सकता है.

उपयोगकर्ता, डिवाइस की सेटिंग में जाकर, अपनी पसंद की स्टोरेज जगह सेट कर सकते हैं. इस पसंदीदा जगह को डिफ़ॉल्ट खाता कहा जाता है. इसका इस्तेमाल संपर्क बनाते समय किया जाता है. ऐप्लिकेशन को इस प्राथमिकता का पालन करना चाहिए. इस दस्तावेज़ में, संपर्कों के स्टोरेज की अलग-अलग जगहों के साथ काम करने का तरीका बताया गया है. इनमें क्लाउड खाते और लोकल खाते शामिल हैं. साथ ही, उपयोगकर्ता की प्राथमिकताओं को मैनेज करने के सबसे सही तरीके भी बताए गए हैं. स्थानीय खाते का मतलब है कि संपर्कों को सीधे डिवाइस पर सेव करना.

डिफ़ॉल्ट खाता वापस पाना

नए संपर्कों के लिए डिफ़ॉल्ट खाता तय करने के लिए, 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 ऑब्जेक्ट जोड़ें, ताकि संपर्क फ़ील्ड शामिल किए जा सकें. साथ ही, संपर्क बनाने के लिए एक साथ कई ऑपरेशन चलाएं.