যোগাযোগ স্টোরেজ অবস্থানগুলি পরিচালনা করুন

অ্যাপগুলি ব্যবহারকারীদের পরিচিতি তৈরি এবং সঞ্চয় করার অনুমতি দিতে পারে। এই পরিচিতিগুলি সাধারণত দুটি স্থানে সংরক্ষণ করা যেতে পারে:

  1. ক্লাউড অ্যাকাউন্ট : পরিচিতিগুলিকে সিঙ্ক্রোনাইজেশন এবং ব্যাকআপের অনুমতি দেওয়ার জন্য একটি ক্লাউড পরিষেবা (যেমন Google ক্লাউড) এর সাথে যুক্ত একটি অ্যাকাউন্টে পরিচিতিগুলি সংরক্ষণ করুন৷
  2. স্থানীয় অ্যাকাউন্ট : পরিচিতিগুলি ডিভাইসে স্থানীয়ভাবে সংরক্ষণ করা যেতে পারে।

ব্যবহারকারীরা ডিভাইস সেটিংসে তাদের পছন্দের স্টোরেজ অবস্থান সেট করতে পারেন। এই পছন্দের অবস্থানটি ডিফল্ট অ্যাকাউন্ট হিসাবে পরিচিত এবং পরিচিতি তৈরি করার সময় ব্যবহৃত হয়। অ্যাপের এই পছন্দকে সম্মান করা উচিত। এই দস্তাবেজটি ব্যাখ্যা করে যে কীভাবে ক্লাউড অ্যাকাউন্ট এবং স্থানীয় অ্যাকাউন্টগুলি সহ বিভিন্ন যোগাযোগ স্টোরেজ অবস্থানের সাথে কাজ করতে হয় এবং ব্যবহারকারীর পছন্দগুলি পরিচালনা করার জন্য সর্বোত্তম অনুশীলনগুলি বাস্তবায়ন করতে হয়। স্থানীয় অ্যাকাউন্ট সরাসরি ডিভাইসে পরিচিতি সঞ্চয় করা বোঝায়।

ডিফল্ট অ্যাকাউন্ট পুনরুদ্ধার করুন

নতুন পরিচিতির জন্য ডিফল্ট অ্যাকাউন্ট নির্ধারণ করতে, ContactsContract.RawContacts.DefaultAccount ব্যবহার করুন

ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState অবজেক্ট পেতে getDefaultAccountForNewContacts() এ কল করুন। এই অবজেক্টে ডিফল্ট অ্যাকাউন্ট সেটিং সম্পর্কে তথ্য রয়েছে।

কোটলিন

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 অবজেক্টকে কীভাবে পার্স করতে হয় তার একটি উদাহরণ এখানে দেওয়া হল:

কোটলিন

// 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 তৈরি করুন। এই তালিকাটি কাঁচা পরিচিতি এবং এর সাথে সম্পর্কিত ডেটা সন্নিবেশ করার ক্রিয়াকলাপ ধারণ করে।

কোটলিন

val ops = ArrayList<ContentProviderOperation>()

জাভা

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

কাঁচা পরিচিতি সন্নিবেশ করার জন্য একটি নতুন ContentProviderOperation তৈরি করুন৷ যেহেতু আপনি একটি অ্যাকাউন্ট নির্দিষ্ট করছেন না, তাই আপনাকে ACCOUNT_TYPE এবং ACCOUNT_NAME অন্তর্ভুক্ত করার দরকার নেই।

কোটলিন

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

যোগাযোগের ক্ষেত্রগুলি (যেমন নাম, ফোন নম্বর, ইমেল) অন্তর্ভুক্ত করতে অপস তালিকায় অন্যান্য ContentProviderOperation অবজেক্টগুলি যুক্ত করুন। তারপর পরিচিতি তৈরি করতে ব্যাচ অপারেশন চালান।

কোটলিন

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 তৈরি করুন।

কোটলিন

val ops = ArrayList<ContentProviderOperation>()

জাভা

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

কাঁচা পরিচিতি সন্নিবেশ করার জন্য একটি নতুন ContentProviderOperation তৈরি করুন৷ নির্বাচিত ক্লাউড অ্যাকাউন্টের অ্যাকাউন্টের ধরন এবং অ্যাকাউন্টের নাম নির্দিষ্ট করতে withValue() পদ্ধতি ব্যবহার করুন।

কোটলিন

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

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

স্থানীয় অ্যাকাউন্টে পরিচিতি তৈরি করুন

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

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

কোটলিন

val ops = ArrayList<ContentProviderOperation>()

জাভা

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

কাঁচা পরিচিতি সন্নিবেশ করার জন্য একটি নতুন ContentProviderOperation তৈরি করুন৷ স্থানীয় অ্যাকাউন্টের জন্য অ্যাকাউন্টের তথ্য নির্দিষ্ট করতে ContactsContract.RawContacts.getLocalAccountName() এবং ContactsContract.RawContacts.getLocalAccountType() ব্যবহার করুন।

কোটলিন

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

যোগাযোগের ক্ষেত্রগুলিকে অন্তর্ভুক্ত করতে অপস তালিকায় অন্যান্য ContentProviderOperation অপারেশন অবজেক্ট যুক্ত করুন এবং পরিচিতি তৈরি করতে ব্যাচ অপারেশনগুলি চালান৷