পরিচিতি স্টোরেজের লোকেশন ম্যানেজ করুন

অ্যাপ ব্যবহারকারীদের পরিচিতি তৈরি ও স্টোর করার অনুমতি দিতে পারে। এইসব পরিচিতি সাধারণত দুটি লোকেশনে সেভ করা যায়:

  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()
  )

জাভা

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 -> {
    }
}

জাভা

// 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>()

জাভা

ArrayList<ContentProviderOperation> ops =
        new ArrayList<ContentProviderOperation>();

র কন্ট্যাক্ট যোগ করতে নতুন ContentProviderOperation তৈরি করুন। আপনি কোনও অ্যাকাউন্ট নির্দিষ্ট করছেন না, তাই আপনাকে ACCOUNT_TYPE এবং ACCOUNT_NAME যোগ করতে হবে না।

Kotlin

val op = ContentProviderOperation.newInsert(
    ContactsContract.RawContacts.CONTENT_URI
)
ops.add(op.build())

জাভা

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
}

জাভা

try {
    getContentResolver().applyBatch(
        ContactsContract.AUTHORITY, ops
    );
} catch (Exception e) {
    // Handle exceptions
}

ক্লাউড অ্যাকাউন্টে পরিচিতি তৈরি করুন

ক্লাউড অ্যাকাউন্টে কোনও পরিচিতি তৈরি করতে, র কন্ট্যাক্ট সারিটি ContactsContract.RawContacts টেবিলে যোগ করুন এবং ক্লাউড অ্যাকাউন্টটি নির্দিষ্ট করুন। এটি কীভাবে করবেন তা দেখুন:

ContentProviderOperationটি অবজেক্টের নতুন ArrayList তৈরি করুন।

Kotlin

val ops = ArrayList<ContentProviderOperation>()

জাভা

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())

জাভা

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());

পরিচিতি ফিল্ড অন্তর্ভুক্ত করতে এবং পরিচিতি তৈরি করার জন্য ব্যাচ অপারেশন কার্যকর করতে ops তালিকায় অন্যান্য ContentProviderOperation অবজেক্ট যোগ করুন।

লোকাল অ্যাকাউন্টে পরিচিতি তৈরি করুন

লোকাল অ্যাকাউন্টে কোনও পরিচিতি তৈরি করতে, ContactsContract.RawContacts টেবিলে একটি নতুন র কন্ট্যাক্ট সারি যোগ করুন এবং লোকাল অ্যাকাউন্টের জন্য অ্যাকাউন্টের তথ্য উল্লেখ করুন:

ContentProviderOperationটি অবজেক্টের নতুন ArrayList তৈরি করুন।

Kotlin

val ops = ArrayList<ContentProviderOperation>()

জাভা

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())

জাভা

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());

পরিচিতি ফিল্ড অন্তর্ভুক্ত করতে, ops তালিকায় অন্যান্য ContentProviderOperation অবজেক্ট যোগ করুন এবং পরিচিতি তৈরি করতে ব্যাচ অপারেশন এক্সিকিউট করুন।