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

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

  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 সহ অন্যান্য রাজ্যের জন্য এটি null হবে।

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