Les applications peuvent autoriser les utilisateurs à créer et à stocker des contacts. Ces contacts peuvent généralement être enregistrés dans deux emplacements:
- Compte cloud: enregistrez les contacts dans un compte associé à un service cloud (tel que Google Cloud) pour permettre la synchronisation et la sauvegarde des contacts.
- Compte local: les contacts peuvent être stockés localement sur l'appareil.
Les utilisateurs peuvent définir l'emplacement de stockage de leur choix dans les paramètres de l'appareil. Cet emplacement préféré est appelé compte par défaut et est utilisé lors de la création de contacts. Les applications doivent respecter cette préférence. Ce document explique comment utiliser différents emplacements de stockage des contacts, y compris les comptes cloud et les comptes locaux, et comment mettre en œuvre les bonnes pratiques pour gérer les préférences des utilisateurs. Le compte local fait référence au stockage des contacts directement sur l'appareil.
Récupérer le compte par défaut
Pour déterminer le compte par défaut pour les nouveaux contacts, utilisez ContactsContract.RawContacts.DefaultAccount
.
Appelez getDefaultAccountForNewContacts()
pour obtenir l'objet ContactsContrast.RawContacts.DefaultAccount.DefaultAccountAndState
. Cet objet contient des informations sur le paramètre de compte par défaut.
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()
);
L'objet DefaultAccountAndState
contient:
- État: indique si un compte par défaut est défini et, le cas échéant, la catégorie de ce compte (cloud, local ou SIM).
- Compte: fournit les informations spécifiques sur le compte (nom et type) si l'état est
DEFAULT_ACCOUNT_STATE_CLOUD or DEFAULT_ACCOUNT_STATE_SIM
. Il sera nul pour les autres États, y comprisDEFAULT_ACCOUNT_STATE_LOCAL
.
Voici un exemple d'analyse de l'objet 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;
}
Créer des contacts sans spécifier de compte
Si le compte par défaut est défini, votre application n'a généralement pas besoin de spécifier explicitement un compte lors de la création de contacts. Le système enregistre automatiquement le nouveau contact dans le compte par défaut. Voici comment créer un contact sans spécifier de compte.
Créez un ArrayList
d'objets ContentProviderOperation
. Cette liste contient les opérations d'insertion du contact brut et des données associées.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
Créez un ContentProviderOperation
pour insérer le contact brut. Étant donné que vous ne spécifiez pas de compte, vous n'avez pas besoin d'inclure ACCOUNT_TYPE
et 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());
Ajoutez d'autres objets ContentProviderOperation
à la liste des opérations pour inclure les champs de contact (nom, numéro de téléphone, adresse e-mail, etc.). Exécutez ensuite l'opération par lot pour créer le contact.
Kotlin
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
)
} catch (e: Exception) {
// Handle exceptions
}
Java
try {
getContentResolver().applyBatch(
ContactsContract.AUTHORITY, ops
);
} catch (Exception e) {
// Handle exceptions
}
Créer des contacts dans un compte cloud
Pour créer un contact dans un compte cloud, insérez la ligne de contact brute dans la table ContactsContract.RawContacts
et spécifiez le compte cloud. Voici comment procéder :
Créez un ArrayList
d'objets ContentProviderOperation
.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
Créez un ContentProviderOperation
pour insérer le contact brut. Utilisez la méthode withValue()
pour spécifier le type et le nom du compte cloud sélectionné.
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());
Ajoutez d'autres objets ContentProviderOperation
à la liste des opérations pour inclure les champs de contact, puis exécutez l'opération par lot pour créer le contact.
Créer des contacts dans le compte local
Pour créer un contact dans le compte local, insérez une ligne de contact brute dans la table ContactsContract.RawContacts
et spécifiez les informations du compte pour le compte local:
Créez un ArrayList
d'objets ContentProviderOperation
.
Kotlin
val ops = ArrayList<ContentProviderOperation>()
Java
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
Créez un ContentProviderOperation
pour insérer le contact brut. Utilisez ContactsContract.RawContacts.getLocalAccountName()
et ContactsContract.RawContacts.getLocalAccountType()
pour spécifier les informations de compte du compte local.
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());
Ajoutez d'autres objets ContentProviderOperation
à la liste des opérations pour inclure les champs de contact, puis exécutez les opérations par lot pour créer le contact.