我正在尝试将生日信息发送给联系人。我使用lookupkey 来识别我的联系人(因为它比仅仅依靠contactId 更安全)。为了能够将事件插入数据库,我需要一个 raw_contact_id ...所以我试图获取这个 id:
String where = ContactsContract.Data.LOOKUP_KEY + " = ? AND "
+ ContactsContract.Data.MIMETYPE + " = ?";
String[] params = new String[] { lookupKey,
ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE };
Cursor cursor = contentResolver.query(
ContactsContract.Data.CONTENT_URI, null, where, params, null);
if (cursor.moveToFirst()) {
birthdayRow = cursor.getInt(idIdx);
long rawContactId = cursor.getLong(cursor
.getColumnIndex(ContactsContract.Data.RAW_CONTACT_ID));
}
问题是,如果没有为联系人设置生日事件,那么我收到的这个光标是空的......而且我不知道如何在没有 raw_contact_id 的情况下插入这个事件。为了插入事件,我执行以下操作:
values.put(ContactsContract.Data.RAW_CONTACT_ID, rawContactId);
values.put(ContactsContract.Data.MIMETYPE, Event.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Event.START_DATE,
birthdayStartDate);
values.put(ContactsContract.CommonDataKinds.Event.TYPE,
ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
values.put(ContactsContract.CommonDataKinds.Event.START_DATE,
context.getString(R.string.birthday_label));
if (birthdayRow >= 0) {
int result = contentResolver.update(
ContactsContract.Data.CONTENT_URI, values,
ContactsContract.Data._ID + " = " + birthdayRow, null);
Log.i("ContactList", "update result: " + result);
} else {
Uri result = contentResolver.insert(
ContactsContract.Data.CONTENT_URI, values);
Log.i("ContactList", "update result: " + result);
}
所以请建议我该怎么做,有没有办法将此事件添加到 ContactData whitout a raw_contact id?我也觉得奇怪的是,对于其他 ContactData,如昵称,我正在做同样的事情,但我没有为 params String[] params = new String[] { String.valueOf(lookupKey), ContactsContract.CommonDataKinds.Nickname 得到一个空光标.CONTENT_ITEM_TYPE }; 即使联系人没有昵称。