Aplikasi dapat mengizinkan pengguna membuat dan menyimpan kontak. Kontak ini biasanya dapat disimpan di dua lokasi:
- Akun cloud: Menyimpan 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 menetapkan lokasi penyimpanan yang diinginkan 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 berbagai lokasi penyimpanan kontak, 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).
- Account: Memberikan detail akun tertentu (nama dan jenis) jika statusnya adalah
DEFAULT_ACCOUNT_STATE_CLOUD or DEFAULT_ACCOUNT_STATE_SIM
. Nilai ini akan null untuk status 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 ditetapkan, aplikasi Anda biasanya tidak perlu menentukan akun secara eksplisit saat membuat kontak. Sistem akan otomatis menyimpan kontak baru ke akun default. Berikut adalah cara membuat kontak tanpa menentukan akun.
Buat ArrayList
baru dari objek ContentProviderOperation
. Daftar ini
menyimpan 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 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 operasi untuk menyertakan
kolom kontak dan menjalankan 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.