0

我想根据身份证号码在联系人中添加一个电话号码,但总是被添加到错误的名字中。谁能告诉我发生这种情况的原因。它在虚拟设备和索尼手机中运行良好,但正如我上面所说的在新的三星手机中出现错误。我可以清楚地确认ID号是对的。这是源代码:

ContentValues values = new ContentValues (); 
values.clear();
values.put(ContactsContract.Data.RAW_CONTACT_ID, contactID);
values.put(Data.MIMETYPE, Phone.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Phone.NUMBER, shortNumber);
values.put(ContactsContract.CommonDataKinds.Phone.TYPE, Phone.TYPE_OTHER);
getContentResolver().insert(Data.CONTENT_URI,values); 
values.clear();
4

1 回答 1

0

这里的答案可能会有所帮助:在 Android 2.2 中插入联系人

根据那里的评论,上面的代码似乎不适用于所有设备。Alok Save https://stackoverflow.com/users/452307/alok-sa ​​ve 发布的答案建议使用 applyBatch() 方法,如下所示:

    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(ContactsContract.Data.CONTENT_URI)
   .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, rawContactInsertIndex)
   .withValue(Data.MIMETYPE,Phone.CONTENT_ITEM_TYPE)
   .withValue(Phone.NUMBER, "9X-XXXXXXXXX")
   .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, "Mike Sullivan")
   .build());  

ContentProviderResult[] res = getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
于 2013-07-14T08:10:18.473 回答