Adicione RawContact para agregar a um contato existente
Estou tentando adicionar um novo RawContact a um contato existente para que meu campo de dados personalizado seja exibido dentro do contato original. Tentei adicionar uma linha de dados StructuredName ao meu novo RawContact com um DisplayName que corresponda ao DisplayName do RawContact original. Eu pensei que combinar DisplayNames seria suficiente para agregar os RawContacts, mas o aplicativo de contatos parece exibir os RawContacts como contatos diferente
Here é meu código
public static void addContact(Context context, Account account, String number, String displayname) {
Log.e(Global.TAG, "adding contact: " + number + " / " + displayname);
ArrayList<ContentProviderOperation> operationList = new ArrayList<ContentProviderOperation>();
//Create our RawContact
ContentProviderOperation.Builder builder = ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
builder.withValue(RawContacts.ACCOUNT_NAME, account.name);
builder.withValue(RawContacts.ACCOUNT_TYPE, account.type);
operationList.add(builder.build());
//Create a Data record of common type 'StructuredName' for our RawContact
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.CommonDataKinds.StructuredName.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE);
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, displayname);
operationList.add(builder.build());
//Create a Data record of custom type "vnd.android.cursor.item/vnd.be.ourservice.profile" to display a link to the profile
builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0);
builder.withValue(ContactsContract.Data.MIMETYPE, "vnd.android.cursor.item/vnd.be.ourservice.profile");
builder.withValue(ContactsContract.Data.DATA1, number);
builder.withValue(ContactsContract.Data.DATA2, "ourservice user");
builder.withValue(ContactsContract.Data.DATA3, "Go to ourservice profile");
operationList.add(builder.build());
try {
mContentResolver.applyBatch(ContactsContract.AUTHORITY, operationList);
Log.d(Global.TAG, "addContact batch applied");
} catch (Exception e) {
Log.e(Global.TAG, "Something went wrong during creation! " + e);
e.printStackTrace();
}
}