Aplikasi dapat mengizinkan pengguna membuat dan menyimpan kontak. Kontak ini biasanya dapat disimpan di dua lokasi:
- Akun cloud: Simpan kontak ke akun yang terkait dengan layanan cloud (seperti Google Cloud) untuk memungkinkan sinkronisasi dan pencadangan kontak.
- Akun lokal: Kontak dapat disimpan secara lokal di perangkat.
Pengguna dapat menyetel lokasi penyimpanan pilihan mereka di setelan perangkat. Lokasi pilihan ini dikenal sebagai akun default, dan digunakan saat membuat kontak. Aplikasi harus mematuhi preferensi ini. Dokumen ini menjelaskan cara menggunakan lokasi penyimpanan kontak yang berbeda, termasuk akun cloud dan akun lokal, serta menerapkan praktik terbaik untuk mengelola preferensi pengguna. Akun lokal mengacu pada penyimpanan kontak langsung di perangkat.
Mengambil akun default
Untuk menentukan akun default untuk kontak baru, gunakan
ContactsContract.RawContacts.DefaultAccount
Panggil getDefaultAccountForNewContacts()
untuk mendapatkan objek
ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
. Objek ini berisi informasi tentang setelan akun default.
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()
);
Objek DefaultAccountAndState
berisi:
- Status: Menunjukkan apakah akun default ditetapkan dan, jika ya, kategori akun tersebut (cloud, lokal, atau SIM).
- Akun: Memberikan detail akun tertentu (nama dan jenis) jika statusnya adalah
DEFAULT_ACCOUNT_STATE_CLOUD or DEFAULT_ACCOUNT_STATE_SIM
. Nilainya akan null untuk negara bagian lain, termasukDEFAULT_ACCOUNT_STATE_LOCAL
.
Berikut adalah contoh cara mengurai objek 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;
}
Membuat kontak tanpa menentukan akun
Jika akun default disetel, aplikasi Anda biasanya tidak perlu menentukan akun secara eksplisit saat membuat kontak. Sistem akan otomatis menyimpan kontak baru ke akun default. Berikut cara membuat kontak tanpa menentukan akun.
Buat ArrayList
baru dari objek ContentProviderOperation
. Daftar ini
berisi operasi untuk menyisipkan kontak mentah dan data terkaitnya.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
Buat ContentProviderOperation
baru untuk menyisipkan kontak mentah. Karena Anda tidak menentukan akun, Anda tidak perlu menyertakan ACCOUNT_TYPE
dan 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());
Tambahkan objek ContentProviderOperation
lainnya ke daftar operasi untuk menyertakan kolom kontak (seperti nama, nomor telepon, email). Kemudian, jalankan operasi batch
untuk membuat kontak.
Kotlin
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
)
} catch (e: Exception) {
// Handle exceptions
}
Java
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
);
} catch (Exception e) {
// Handle exceptions
}
Membuat kontak di akun cloud
Untuk membuat kontak di akun cloud, masukkan baris kontak mentah ke dalam tabel
ContactsContract.RawContacts
dan tentukan akun cloud. Berikut caranya:
Buat ArrayList
baru dari objek ContentProviderOperation
.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
Buat ContentProviderOperation
baru untuk menyisipkan kontak mentah. Gunakan metode
withValue()
untuk menentukan jenis akun dan nama akun dari
akun cloud yang dipilih.
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());
Tambahkan objek ContentProviderOperation
lainnya ke daftar ops untuk menyertakan
kolom kontak dan jalankan operasi batch untuk membuat kontak.
Membuat kontak di akun lokal
Untuk membuat kontak di akun lokal, masukkan baris kontak mentah baru ke dalam tabel
ContactsContract.RawContacts
dan tentukan informasi akun untuk akun lokal:
Buat ArrayList
baru dari objek ContentProviderOperation
.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
Buat ContentProviderOperation
baru untuk menyisipkan kontak mentah. Gunakan
ContactsContract.RawContacts.getLocalAccountName()
dan
ContactsContract.RawContacts.getLocalAccountType()
untuk menentukan informasi
akun untuk akun lokal.
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());
Tambahkan objek ContentProviderOperation
lainnya ke daftar operasi untuk menyertakan
kolom kontak, dan jalankan operasi batch untuk membuat kontak.