我目前正在开发一款应用,我需要将联系人插入手机联系人列表。使用ContactsContract.RawContacts批量插入,我成功地将联系人插入电话簿。
http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
然而,当尝试更新它们时,他们只需添加更多的电话号码,而不是替换旧电话号码。
所以我来到ContactsContract.Data,通过Contact_ID显然可以更新旧的phonenumber。
http://developer.android.com/reference/android/provider/ContactsContract.Data.html
我现在的问题是,是否可以在插入时检索Contacts_ID?因此,当我通过此代码插入联系人时:
ArrayList<ContentProviderOperation> ops =
new ArrayList<ContentProviderOperation>();
...
int rawContactInsertIndex = ops.size();
ops.add(ContentProviderOperation.newInsert(RawContacts.CONTENT_URI)
.withValue(RawContacts.ACCOUNT_TYPE, accountType)
.withValue(RawContacts.ACCOUNT_NAME, accountName)
.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());
getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
我会找回Contacts_ID吗?
感谢您提前给予我任何帮助。
答案 0 :(得分:0)
当然可以!这是:
ContentProviderResult[] res;
try
{
res = context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
if (res != null && res[0] != null)
{
String uri = res[0].uri.getPath().substring(14);
int contact_id = new Integer(uri).intValue());
}
}
catch (RemoteException e)
{
e.printStackTrace();
}
catch (OperationApplicationException e)
{
e.printStackTrace();
}
答案 1 :(得分:0)
更好的方法,你得到_ID而不是RAW_ID !!
将其添加为静态变量:
static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
ContactsContract.Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.Contacts.STARRED,
ContactsContract.Contacts.TIMES_CONTACTED,
ContactsContract.Contacts.CONTACT_PRESENCE,
ContactsContract.Contacts.PHOTO_ID,
ContactsContract.Contacts.LOOKUP_KEY,
ContactsContract.Contacts.HAS_PHONE_NUMBER,
};
然后在插入后添加:
// Displayed name
String displayed_name = "Contact's name goes here";
// Add the new contact
try
{
context.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
}
catch (Exception e)
{
e.printStackTrace();
}
String select = "(" + ContactsContract.Contacts.DISPLAY_NAME + " == \"" +displayed_name+ "\" )";
Cursor c = context.getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
context.startManagingCursor(c);
if (c.moveToNext())
{
int id = new Integer(c.getString(0)).intValue();
}
它对我有用。