Android 如何在创建新联系人时设置原始联系人ID

Android 如何在创建新联系人时设置原始联系人ID,android,Android,当我想创建一个新联系人时,我想我必须设置一个原始联系人ID。如果不是,这些代码如何运行良好。我说得对吗?如果没有,它如何知道这些数据属于同一联系人。如果是,如何设置原始联系人ID?也许问题可以这样说:我如何才能获得新的原始联系人ID,而这是不存在的?然后发布我的代码(我将0设置为原始联系人ID): ArrayList ops=new ArrayList(); 添加操作(ContentProviderOperation .newInsert(contacts contract.RawContact

当我想创建一个新联系人时,我想我必须设置一个原始联系人ID。如果不是,这些代码如何运行良好。我说得对吗?如果没有,它如何知道这些数据属于同一联系人。如果是,如何设置原始联系人ID?也许问题可以这样说:我如何才能获得新的原始联系人ID,而这是不存在的?然后发布我的代码(我将0设置为原始联系人ID):

ArrayList ops=new ArrayList();
添加操作(ContentProviderOperation
.newInsert(contacts contract.RawContacts.CONTENT\u URI)
.withValue(contacts contract.raw contacts.ACCOUNT_TYPE,null)
.withValue(contacts contract.raw contacts.ACCOUNT\u NAME,null)
.build());
//-------------------------------------姓名
if(displayName!=null){
添加操作(ContentProviderOperation
.newInsert(contacts合同.Data.CONTENT\u URI)
.withValueBackReference(
Contacts contract.Data.RAW_CONTACT_ID,0)
.有价值(
Contacts contract.Data.MIMETYPE,
ContactsContract.CommonDataTypes.StructuredName.CONTENT\u ITEM\u TYPE)
.有价值(
Contacts contract.CommonDataTypes.StructuredName.DISPLAY\u NAME,
displayName.build());
}
//-------------------------------------手机号码
if(mobileNumber!=null){
添加操作(ContentProviderOperation
.newInsert(contacts合同.Data.CONTENT\u URI)
.withValueBackReference(
Contacts contract.Data.RAW_CONTACT_ID,0)
.有价值(
Contacts contract.Data.MIMETYPE,
Contacts contract.CommonDataTypes.Phone.CONTENT\u ITEM\u TYPE)
.带值(contacts contract.commondatatypes.Phone.NUMBER、,
移动电话(电话号码)
.带值(contacts contract.commondatatypes.Phone.TYPE、,
Contacts contract.CommonDataTypes.Phone.TYPE\手机)
.build());
}
context.getContentResolver().applyBatch(contacts contract.AUTHORITY,ops);

您必须使用int-rawContactInsertIndex=ops.size(),如下所示

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
        int rawContactInsertIndex = ops.size();

        ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI).withValue(RawContacts.ACCOUNT_TYPE, null).withValue(RawContacts.ACCOUNT_NAME, null).build());

        ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI).withValueBackReference(Data.RAW_CONTACT_ID, rawContactInsertIndex).withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
                .withValue(StructuredName.DISPLAY_NAME, personalVcard.getFirstName()).build());
ArrayList ops=new ArrayList();
int rawContactInsertIndex=ops.size();
add(ContentProviderOperation.newInsert(RawContacts.CONTENT\u URI).withValue(RawContacts.ACCOUNT\u TYPE,null).withValue(RawContacts.ACCOUNT\u NAME,null.build());
ops.add(ContentProviderOperation.newInsert(Data.CONTENT\u URI)。withValueBackReference(Data.RAW\u CONTACT\u ID,rawContactInsertIndex)。withValue(Data.MIMETYPE,StructuredName.CONTENT\u ITEM\u TYPE)
.withValue(StructuredName.DISPLAY_NAME,personalVcard.getFirstName()).build());

我想我在JB上发现了一些奇怪的问题,这些代码在以前的android版本上运行良好。当您要求创建共享相同基本名称的联系人时,则创建过程没有按应有的方式进行,withValueBackReference返回的原始联系人ID(ContactsContract.Data.raw_contact_ID,0)似乎是相同的

例如,尝试创建Contact1、Contact2和Contact3:奇怪的事情开始了。您很可能看不到任何联系人,但尝试使用API删除联系人将导致通知您该联系人实际存在

我不确定这是破坏我的Jelly Bean平台的后果,还是android构建中的常见问题。请注意,我正在重定向到正在开发的平台


有没有人在4.1.2上看到过这一点?

这段代码将用手机号码保存联系人姓名

private void saveContact() { 
  this.sessionpref.setPreference("Saved", "Done");
  ArrayList<ContentProviderOperation> ops = new ArrayList();
  ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
      .withValue("account_type", null).withValue("account_name", null).build()); 

  if (this.DisplayName != null) {
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
        .withValueBackReference("raw_contact_id", 0)
        .withValue("mimetype", "vnd.android.cursor.item/name")
        .withValue("data1", this.DisplayName)
        .build());
  } else {
    Toast.makeText(getApplicationContext(), "Contact Exist", 3000).show(); 
  } 

  if (this.MobileNumber != null) {
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
        .withValueBackReference("raw_contact_id", 0)
        .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
        .withValue("data1", this.MobileNumber).withValue("data2", Integer.valueOf(2))
        .build()); 
  } else { 
    Toast.makeText(getApplicationContext(), "Contact Exist", 3000).show(); 
  } 
  try { 
    getContentResolver().applyBatch("com.android.contacts", ops); 
  } catch (Exception e) { 
    e.printStackTrace(); 
  }
}
private void saveContact(){
this.sessionpref.setPreference(“保存”、“完成”);
ArrayList ops=新的ArrayList();
添加(ContentProviderOperation.newInsert(RawContacts.CONTENT\uURI)
.withValue(“帐户类型”,null).withValue(“帐户名称”,null).build());
if(this.DisplayName!=null){
add(ContentProviderOperation.newInsert(Data.CONTENT\u URI)
.withValueBackReference(“原始联系人id”,0)
.withValue(“mimetype”、“vnd.android.cursor.item/name”)
.withValue(“数据1”,此.DisplayName)
.build());
}否则{
makeText(getApplicationContext(),“联系人存在”,3000).show();
} 
如果(this.MobileNumber!=null){
add(ContentProviderOperation.newInsert(Data.CONTENT\u URI)
.withValueBackReference(“原始联系人id”,0)
.withValue(“mimetype”、“vnd.android.cursor.item/phone_v2”)
.withValue(“data1”,此为.MobileNumber)。withValue(“data2”,Integer.valueOf(2))
.build());
}否则{
makeText(getApplicationContext(),“联系人存在”,3000).show();
} 
试试{
getContentResolver().applyBatch(“com.android.contacts”,ops);
}捕获(例外e){
e、 printStackTrace();
}
}
private void saveContact() { 
  this.sessionpref.setPreference("Saved", "Done");
  ArrayList<ContentProviderOperation> ops = new ArrayList();
  ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
      .withValue("account_type", null).withValue("account_name", null).build()); 

  if (this.DisplayName != null) {
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
        .withValueBackReference("raw_contact_id", 0)
        .withValue("mimetype", "vnd.android.cursor.item/name")
        .withValue("data1", this.DisplayName)
        .build());
  } else {
    Toast.makeText(getApplicationContext(), "Contact Exist", 3000).show(); 
  } 

  if (this.MobileNumber != null) {
    ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
        .withValueBackReference("raw_contact_id", 0)
        .withValue("mimetype", "vnd.android.cursor.item/phone_v2")
        .withValue("data1", this.MobileNumber).withValue("data2", Integer.valueOf(2))
        .build()); 
  } else { 
    Toast.makeText(getApplicationContext(), "Contact Exist", 3000).show(); 
  } 
  try { 
    getContentResolver().applyBatch("com.android.contacts", ops); 
  } catch (Exception e) { 
    e.printStackTrace(); 
  }
}