4 votos

Añadir contacto a través de adb shell

Intento añadir un contacto usando el adb shell:

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 consola no muestra ningún error, pero el comando no devuelve ninguna salida. Sin embargo, content query --uri content://com.android.contacts/raw_contacts devuelve No result found.

No especificar el id de contacto o el id de contacto en bruto tampoco ayuda.

Estoy tratando de imitar el método insertContact de https://www.dev2qa.com/how-to-add-contact-in-Android-programmatically/ utilizando el shell adb.

¿Cómo puedo añadir correctamente un contacto utilizando el content ¿herramienta? Soy consciente de que los contactos se pueden añadir mediante el envío de una intención, pero prefiero no utilizar la interfaz de usuario para este fin.

4voto

user295794 Puntos 48

Me encontré con la necesidad de hacer precisamente eso. Así es como me las arreglé para hacer el trabajo.

Primero , creo un contacto en bruto haciendo:

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

Esto creará efectivamente un nuevo contacto (podrá ver un nuevo contacto en la aplicación Contacto de Android) pero sin información adicional (teléfono, nombre, correo electrónico, etc...)

Siguiente , añado la información del nombre al contacto recién creado:

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

Después de esto, notarás cómo el nuevo contacto tiene ahora un nombre para mostrar en la aplicación Contactos de Android.

Aviso cómo, en este caso, necesito pasar el raw_contact_id del contacto para el que estoy tratando de establecer el nombre. He utilizado 1 sólo como ejemplo.

Puede consultar esta información comprobando los datos de todos los contactos:

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

O si quieres la respuesta directa:

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

Finalmente , añado la información del teléfono:

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

¡Y ya hemos terminado! Puedes comprobar la aplicación Contactos de Android y ver un contacto con un nombre para mostrar ( MY_CONTACT_NAME ) y un número de teléfono ( MY_PHONE_NUMBER ). Hay mucha más información que puedes añadir, pero supongo que esto cubre tus necesidades o al menos te da una buena idea de cómo continuar.

Bonificación: Sé que no es exactamente el tema, pero incluso se puede ejecutar un pequeño programa para automatizar esto usando UiAutomator . Por ejemplo:

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

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X