จัดการตำแหน่งพื้นที่เก็บข้อมูลรายชื่อติดต่อ

แอปอาจอนุญาตให้ผู้ใช้สร้างและจัดเก็บรายชื่อติดต่อ โดยปกติแล้ว รายชื่อติดต่อเหล่านี้จะบันทึกได้ 2 แห่ง ดังนี้

  1. บัญชีระบบคลาวด์: บันทึกรายชื่อติดต่อไปยังบัญชีที่เชื่อมโยงกับบริการระบบคลาวด์ (เช่น Google Cloud) เพื่ออนุญาตให้ซิงค์และสำรองข้อมูลรายชื่อติดต่อ
  2. บัญชีในเครื่อง: จัดเก็บรายชื่อติดต่อไว้ในอุปกรณ์

ผู้ใช้สามารถตั้งค่าตำแหน่งพื้นที่เก็บข้อมูลที่ต้องการในการตั้งค่าอุปกรณ์ ตำแหน่งที่ต้องการนี้เรียกว่าบัญชีเริ่มต้น และจะใช้เมื่อสร้างรายชื่อติดต่อ แอปควรเคารพค่ากําหนดนี้ เอกสารนี้อธิบายวิธีใช้ตำแหน่งการจัดเก็บรายชื่อติดต่อต่างๆ ซึ่งรวมถึงบัญชีระบบคลาวด์และบัญชีในเครื่อง รวมถึงการใช้แนวทางปฏิบัติแนะนำในการจัดการค่ากำหนดของผู้ใช้ บัญชีในเครื่องหมายถึงการจัดเก็บรายชื่อติดต่อในอุปกรณ์โดยตรง

เรียกข้อมูลบัญชีเริ่มต้น

หากต้องการกำหนดบัญชีเริ่มต้นสำหรับรายชื่อติดต่อใหม่ ให้ใช้ ContactsContract.RawContacts.DefaultAccount

เรียกใช้ getDefaultAccountForNewContacts() เพื่อรับออบเจ็กต์ ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState ออบเจ็กต์นี้มีข้อมูลเกี่ยวกับการตั้งค่าบัญชีเริ่มต้น

Kotlin

import ContactsContrast.RawContacts
import ContactsContrast.RawContacts.DefaultAccount
import ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState

val defaultAccountAndState: DefaultAccountAndState =
  DefaultAccount.getDefaultAccountForNewContacts(
      getContentResolver()
  )

Java

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

Java

// 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 รายการนี้เก็บการดำเนินการเพื่อแทรกรายชื่อติดต่อดิบและข้อมูลที่เกี่ยวข้อง

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

สร้าง ContentProviderOperation ใหม่เพื่อแทรกรายชื่อติดต่อดิบ เนื่องจากคุณไม่ได้ระบุบัญชี คุณจึงไม่จำเป็นต้องใส่ ACCOUNT_TYPE และ ACCOUNT_NAME

Kotlin

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

Java

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

เพิ่มออบเจ็กต์ ContentProviderOperation อื่นๆ ลงในรายการการดำเนินการเพื่อรวมช่องติดต่อ (เช่น ชื่อ หมายเลขโทรศัพท์ อีเมล) จากนั้นเรียกใช้การดำเนินการแบบเป็นกลุ่มเพื่อสร้างรายชื่อติดต่อ

Kotlin

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

Java

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

สร้างรายชื่อติดต่อในบัญชีระบบคลาวด์

หากต้องการสร้างรายชื่อติดต่อในบัญชีระบบคลาวด์ ให้แทรกแถวรายชื่อติดต่อดิบลงในตาราง ContactsContract.RawContacts แล้วระบุบัญชีระบบคลาวด์ โดยมีวิธีดังนี้

สร้าง ArrayList ใหม่ของออบเจ็กต์ ContentProviderOperation

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

Java

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 แล้วระบุข้อมูลบัญชีสำหรับบัญชีในเครื่อง ดังนี้

สร้าง ArrayList ใหม่ของออบเจ็กต์ ContentProviderOperation

Kotlin

val ops = ArrayList<ContentProviderOperation>()

Java

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

Java

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 อื่นๆ ลงในรายการการดำเนินการเพื่อรวมช่องรายชื่อติดต่อ และดำเนินการแบบเป็นกลุ่มเพื่อสร้างรายชื่อติดต่อ