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

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

  1. ক্লাউড অ্যাকাউন্ট : কন্টাক্ট সিঙ্ক্রোনাইজেশন এবং ব্যাকআপের জন্য, কোনো ক্লাউড পরিষেবার (যেমন গুগল ক্লাউড) সাথে যুক্ত অ্যাকাউন্টে কন্টাক্টগুলো সংরক্ষণ করুন।
  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());

কন্ট্যাক্ট ফিল্ডগুলো (যেমন নাম, ফোন নম্বর, ইমেল) অন্তর্ভুক্ত করার জন্য ops লিস্টে অন্যান্য 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());

কন্টাক্ট ফিল্ডগুলো অন্তর্ভুক্ত করতে এবং কন্টাক্টটি তৈরি করার জন্য ব্যাচ অপারেশনটি সম্পাদন করতে ops লিস্টে অন্যান্য 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());

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