添加RawContact所以它聚合到一个现有的联系人 [英] Add RawContact so it aggregates to an existing contact

查看:315
本文介绍了添加RawContact所以它聚合到一个现有的联系人的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想添加一个新的RawContact到现有的联系,所以我的自定义数据字段显示里面原有的联系。我尝试添加StructuredName数据行到我的新RawContact一个显示名称,原来RawContact的显示名称相匹配。我以为匹配DisplayNames就足以聚集既RawContacts但联系人应用程序似乎同时显示RawContacts为不同的联系人。

下面是我的code

 公共静态无效的addContact(上下文的背景下,帐帐,串号,串显示名称){
    Log.e(Global.TAG,并称联系:+数字+/+显示名称);

    ArrayList的< ContentProviderOperation> operationList =新的ArrayList< ContentProviderOperation>();

    //创建我们的RawContact
    ContentProviderOperation.Builder建设者= ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
    builder.withValue(RawContacts.ACCOUNT_NAME,account.name);
    builder.withValue(RawContacts.ACCOUNT_TYPE,account.type);

    operationList.add(builder.build());

    //创建普通型StructuredName的数据记录我们RawContact
    建设者= 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,显示名称);
    operationList.add(builder.build());

    //创建自定义类型vnd.android.cursor.item / vnd.be.ourservice.profile的数据记录显示的链接配置文件
    建设者= 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,数量);
    builder.withValue(ContactsContract.Data.DATA2,ourservice用户);
    builder.withValue(ContactsContract.Data.DATA3,转到ourservice配置文件);
    operationList.add(builder.build());



    尝试 {
     mContentResolver.applyBatch(ContactsContract.AUTHORITY,operationList);
     Log.d(Global.TAG的addContact批量应用);
    }赶上(例外五){
     Log.e(Global.TAG,有些事情去创建过程中错了!+ E);
     e.printStackTrace();
    }
   }
 

解决方案

我想它了。我试着用含有相同数量的我原来的联系人,然后将其正确地聚合了RawContacts一个CommonDataKinds.Phone行替换CommonDataKinds.StructuredName行。

工作code看起来像这样

 公共静态无效addContactTag(上下文的背景下,帐帐,串号){

    ArrayList的< ContentProviderOperation> operationList =新的ArrayList< ContentProviderOperation>();

    //创建我们的RawContact
    ContentProviderOperation.Builder建设者= ContentProviderOperation.newInsert(RawContacts.CONTENT_URI);
    builder.withValue(RawContacts.ACCOUNT_NAME,account.name);
    builder.withValue(RawContacts.ACCOUNT_TYPE,account.type);
    operationList.add(builder.build());

    //创建普通型'电话'的数据记录我们RawContact
    建设者= ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(Data.RAW_CONTACT_ID,0);
    builder.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER,数量);
    operationList.add(builder.build());

    //创建自定义类型vnd.android.cursor.item / vnd.be.ourservice.profile的数据记录显示一个链接到我们的个人资料
    建设者= ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(Data.RAW_CONTACT_ID,0);
    builder.withValue(ContactsContract.Data.MIMETYPE,OURSERVICE_MIMETYPE);
    builder.withValue(ContactsContract.Data.DATA1,数量);
    builder.withValue(ContactsContract.Data.DATA2,ourservice用户);
    builder.withValue(ContactsContract.Data.DATA3,转到ourservice配置文件);
    operationList.add(builder.build());


    尝试 {
        mContentResolver.applyBatch(ContactsContract.AUTHORITY,operationList);
        Log.d(Global.TAG的addContact批量应用);
    }赶上(例外五){
        Log.e(Global.TAG,有些事情去创建过程中错了!+ E);
        e.printStackTrace();
    }
}
 

I am trying to add a new RawContact to an existing Contact so my custom data field shows up inside the original Contact. I tried Adding a StructuredName Data row to my new RawContact with a DisplayName that matches the DisplayName of the original RawContact. I thought matching DisplayNames would be enough to aggregate both RawContacts but the contacts app seems to display both RawContacts as different Contacts.

Here is my code

  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();
    }
   }

解决方案

I figured it out. I tried replacing the CommonDataKinds.StructuredName row with a CommonDataKinds.Phone row that contains the same number as my original contact and then it aggregates the RawContacts correctly.

The working code looks like this

public static void addContactTag(Context context, Account account, String number) {

    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 'Phone' for our RawContact                                                                  
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
    builder.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, number);
    operationList.add(builder.build());

    //Create a Data record of custom type "vnd.android.cursor.item/vnd.be.ourservice.profile" to display a link to our     profile    
    builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
    builder.withValueBackReference(Data.RAW_CONTACT_ID, 0);
    builder.withValue(ContactsContract.Data.MIMETYPE, OURSERVICE_MIMETYPE);
    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();
    }
}

这篇关于添加RawContact所以它聚合到一个现有的联系人的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆