مکان های ذخیره مخاطب را مدیریت کنید

برنامه ها ممکن است به کاربران اجازه ایجاد و ذخیره مخاطبین را بدهند. این مخاطبین معمولاً می توانند در دو مکان ذخیره شوند:

  1. حساب Cloud : مخاطبین را در حساب مرتبط با یک سرویس ابری (مانند Google Cloud) ذخیره کنید تا امکان همگام سازی و پشتیبان گیری از مخاطبین فراهم شود.
  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 شامل:

  • State: نشان می دهد که آیا یک حساب پیش فرض تنظیم شده است یا خیر، و در این صورت، دسته آن حساب (ابر، محلی یا سیم کارت) تنظیم شده است.
  • حساب: اگر وضعیت 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;
}

مخاطبین را بدون تعیین حساب ایجاد کنید

اگر حساب پیش‌فرض تنظیم شده باشد، برنامه شما معمولاً نیازی به تعیین صریح حساب هنگام ایجاد مخاطبین ندارد. سیستم به طور خودکار مخاطب جدید را در حساب پیش فرض ذخیره می کند. در اینجا نحوه ایجاد مخاطب بدون مشخص کردن حساب آورده شده است.

یک ArrayList جدید از اشیاء ContentProviderOperation ایجاد کنید. این لیست عملیات درج مخاطب خام و داده های مرتبط با آن را نگه می دارد.

کاتلین

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 را به لیست ops اضافه کنید تا فیلدهای تماس (مانند نام، شماره تلفن، ایمیل) را در بر گیرد. سپس عملیات دسته ای را برای ایجاد مخاطب اجرا کنید.

کاتلین

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

جاوا

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

مخاطبین را در یک حساب ابری ایجاد کنید

برای ایجاد یک مخاطب در یک حساب ابری، ردیف مخاطب خام را در جدول ContactsContract.RawContacts وارد کرده و حساب ابری را مشخص کنید. در اینجا به این صورت است:

یک ArrayList جدید از اشیاء ContentProviderOperation ایجاد کنید.

کاتلین

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 را به لیست ops اضافه کنید تا فیلدهای مخاطب را شامل شود و عملیات دسته ای را برای ایجاد مخاطب اجرا کنید.

مخاطبین را در حساب محلی ایجاد کنید

برای ایجاد یک مخاطب در حساب محلی، یک ردیف مخاطب خام جدید را در جدول ContactsContract.RawContacts وارد کنید و اطلاعات حساب را برای حساب محلی مشخص کنید:

یک ArrayList جدید از اشیاء ContentProviderOperation ایجاد کنید.

کاتلین

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 را به لیست ops اضافه کنید تا فیلدهای مخاطب را شامل شود و عملیات دسته ای را برای ایجاد مخاطب اجرا کنید.