แอปอาจอนุญาตให้ผู้ใช้สร้างและจัดเก็บรายชื่อติดต่อ โดยปกติแล้ว รายชื่อติดต่อเหล่านี้จะบันทึกได้ใน 2 ตำแหน่ง ดังนี้
- บัญชีระบบคลาวด์: บันทึกรายชื่อติดต่อลงในบัญชีที่เชื่อมโยงกับบริการระบบคลาวด์ (เช่น Google Cloud) เพื่ออนุญาตให้ซิงค์ข้อมูลและสำรองข้อมูลรายชื่อติดต่อ
- บัญชีในเครื่อง: คุณสามารถจัดเก็บรายชื่อติดต่อไว้ในเครื่องได้
ผู้ใช้สามารถตั้งค่าตำแหน่งพื้นที่เก็บข้อมูลที่ต้องการได้ในการตั้งค่าอุปกรณ์ ตำแหน่งที่ต้องการนี้เรียกว่าบัญชีเริ่มต้น และจะใช้เมื่อสร้างรายชื่อติดต่อ แอปควรปฏิบัติตามค่ากำหนดนี้ เอกสารนี้อธิบายวิธีทำงานกับตำแหน่งจัดเก็บข้อมูลรายชื่อติดต่อต่างๆ ซึ่งรวมถึงบัญชีระบบคลาวด์และบัญชีในเครื่อง ตลอดจนใช้แนวทางปฏิบัติแนะนำสำหรับการจัดการค่ากำหนดของผู้ใช้ บัญชีในเครื่องหมายถึงการจัดเก็บรายชื่อติดต่อไว้ในอุปกรณ์โดยตรง
เรียกข้อมูลบัญชีเริ่มต้น
หากต้องการกำหนดบัญชีเริ่มต้นสำหรับรายชื่อติดต่อใหม่ ให้ใช้
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 อื่นๆ ลงในรายการการดำเนินการเพื่อรวมช่องรายชื่อติดต่อ และดำเนินการแบบกลุ่มเพื่อสร้างรายชื่อติดต่อ