Как добавить подключения приложения к существующему контакту, как это делают WhatsApp и Viber?

Я хочу, чтобы соединение моего приложения для Android было добавлено в существующий контакт. Я отправляю все свои контакты из телефонной книги на сервер (с именем, номером телефона и идентификатором контакта), чтобы проверить, какие контакты зарегистрированы для моего приложения. Я отправлю обратно клиентскому приложению идентификаторы контактов, которые соответствуют.

Теперь я хочу добавить соединение к этим контактам в моей телефонной книге на основе этих возвращенных идентификаторов.

Как добавить соединение с приложением, отредактировав контакт на основе одного из возвращенных идентификаторов контактов?

Спасибо

1 ответ

Решение

Попробуйте с этим кодом, он даст вам желаемый результат

public static void addContact(Context context, MyContact contact) {
    ContentResolver resolver = context.getContentResolver();
     // add condition that you want to check
    String where= RawContacts.ACCOUNT_TYPE + " = ? AND " +RawContacts.DISPLAY_NAME_PRIMARY+"=?";
    //values of that condotion
    String[] value=new String[] { AccountGeneral.ACCOUNT_TYPE ,contact.name};
    resolver.delete(RawContacts.CONTENT_URI, where, value);

    ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(RawContacts.CONTENT_URI, true))
            .withValue(RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME)
            .withValue(RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE)
            //.withValue(RawContacts.SOURCE_ID, 12345)
            //.withValue(RawContacts.AGGREGATION_MODE, RawContacts.AGGREGATION_MODE_DISABLED)
            .build());

    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Settings.CONTENT_URI, true))
            .withValue(RawContacts.ACCOUNT_NAME, AccountGeneral.ACCOUNT_NAME)
            .withValue(RawContacts.ACCOUNT_TYPE, AccountGeneral.ACCOUNT_TYPE)
            .withValue(Settings.UNGROUPED_VISIBLE, 1)
            .build());

    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true)) 
            .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
            .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE) 
            .withValue(StructuredName.GIVEN_NAME, contact.name) 
            .withValue(StructuredName.FAMILY_NAME, contact.lastName) 
            .build()); 

    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true)) 
            .withValueBackReference(Data.RAW_CONTACT_ID, 0) 
            .withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
            .withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, "12342145")

            .build());


    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true)) 
             .withValueBackReference(Data.RAW_CONTACT_ID, 0)
             .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Email.CONTENT_ITEM_TYPE)
             .withValue(ContactsContract.CommonDataKinds.Email.DATA, "sample@email.com")
             .build());     


    ops.add(ContentProviderOperation.newInsert(addCallerIsSyncAdapterParameter(Data.CONTENT_URI, true))
            .withValueBackReference(Data.RAW_CONTACT_ID, 0)
            .withValue(Data.MIMETYPE, MIMETYPE)
            .withValue(Data.DATA1, 12345)
            .withValue(Data.DATA2, "sample")
            .withValue(Data.DATA3, "sample")
            .build());
    try {
        ContentProviderResult[] results = resolver.applyBatch(ContactsContract.AUTHORITY, ops);
        i++;
        if (results.length == 0)
            ;
    }
    catch (Exception e) {
        e.printStackTrace();
    }
}
Другие вопросы по тегам