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

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

  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 के साथ-साथ अन्य राज्यों के लिए, इसकी वैल्यू 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 ऑब्जेक्ट जोड़ें. इसके बाद, संपर्क बनाने के लिए बैच ऑपरेशन लागू करें.