4 votes

Ajouter un contact via le shell adb

J'essaie d'ajouter un contact en utilisant le shell adb :

content insert --uri content://com.android.contacts/raw_contacts --bind deleted:i:0 --bind data1:s:'Bla Fffff' --bind data2:s:'Bla' --bind data3:s:'Fffff' --bind mimetype:s:'vnd.android.cursor.item/name' --bind contact_id:i:1 --bind raw_contact_id:i:1

La console ne montre pas d'erreur, mais la commande ne renvoie aucune sortie. Néanmoins, content query --uri content://com.android.contacts/raw_contacts renvoie à No result found.

Ne pas spécifier l'identifiant du contact ou l'identifiant brut du contact n'aide pas non plus.

J'essaie d'imiter la méthode insertContact de l'application https://www.dev2qa.com/how-to-add-contact-in-Android-programmatically/ en utilisant le shell adb.

Comment puis-je ajouter correctement un contact en utilisant le content outil ? Je sais que l'on peut ajouter des contacts en envoyant une intention, mais je préfère ne pas utiliser l'interface utilisateur à cette fin.

4voto

acrespo Points 121

Je me suis retrouvé à avoir besoin de faire ça. Voici comment j'ai réussi à faire le travail.

Premier je crée un contact brut en faisant :

adb shell content insert --uri content://com.android.contacts/raw_contacts --bind account_type:s:SOME_ACCOUNT_TYPE --bind account_name:s:MY_ACCOUNT_NAME

Cela créera effectivement un nouveau contact (vous pourrez voir un nouveau contact dans l'application Contact d'Android) mais sans informations supplémentaires (téléphone, nom, courriel, etc.).

Suivant J'ajoute des informations sur le nom du contact récemment créé :

adb shell content insert --uri content://com.android.contacts/data --bind raw_contact_id:i:1 --bind mimetype:s:vnd.android.cursor.item/name --bind data1:s:MY_CONTACT_NAME

Ensuite, vous remarquerez que le nouveau contact a maintenant un nom d'affichage dans l'application Contacts d'Android.

Avis comment, dans ce cas, j'ai besoin de passer la raw_contact_id du contact dont j'essaie de définir le nom. J'ai utilisé 1 à titre d'exemple.

Vous pouvez interroger ces informations en vérifiant les données de tous les contacts :

adb shell content query --uri content://com.android.contacts/raw_contacts

Ou si vous voulez une réponse directe :

adb shell content query --uri content://com.android.contacts/raw_contacts --projection _id --where "account_name=\'MY_ACCOUNT_NAME\'"

Enfin J'ajoute l'information téléphonique :

adb shell content insert --uri content://com.android.contacts/data --bind raw_contact_id:i:1 --bind mimetype:s:vnd.android.cursor.item/phone_v2 --bind data1:s:MY_PHONE_NUMBER --bind data2:s:SOME_PHONE_TYPE --bind data3:s:SOME_LABEL

Et nous avons terminé ! Vous pouvez consulter l'application Contacts d'Android et voir un contact avec un nom d'affichage ( MY_CONTACT_NAME ) et un numéro de téléphone ( MY_PHONE_NUMBER ). Vous pouvez ajouter beaucoup d'autres informations, mais je pense que cela couvre vos besoins ou vous donne au moins une bonne idée de la façon de continuer.

Bonus : je sais que ce n'est pas exactement le sujet, mais vous pouvez même lancer un petit programme pour automatiser cette opération en utilisant les éléments suivants UiAutomator . Par exemple :

InstrumentationRegistry.getInstrumentation().getUiAutomation().executeShellCommand("content query --uri content://com.android.contacts/raw_contacts");

androidalle.com

AndroidAlle est une communauté de androiders où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X