Android:以编程方式将生日事件添加到Android联系人

问题描述:

我正在尝试将联系人的生日信息添加到联系人中。我使用lookupkey来识别我的联系人(因为它比只依赖contactId更安全)。为了能够插入到的事件,我需要一个raw_contact_id数据库...所以我试图让这个ID:Android:以编程方式将生日事件添加到Android联系人

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

所以,请指教我该怎么办,有没有什么办法,以这个事件添加到联络人资料whitout一个raw_contact ID?我也发现奇怪的事实,对于其他ContactData像昵称我做同样的事情,我没有得到一个空的游标的参数 String [] params = new String [] {String.valueOf(lookupKey), ContactsContract.CommonDataKinds .Nickname.CONTENT_ITEM_TYPE};即使联系人没有昵称,也可以使用 。

在执行插入之前,使用它来获取原始联系人ID。

long rawContactId = -1; 
    String[] projection = new String[]{ContactsContract.CommonDataKinds.Event.RAW_CONTACT_ID}; 
    String selection = ContactsContract.CommonDataKinds.Event.CONTACT_ID + "=?"; 
    String[] selectionArgs = new String[]{ 
    String.valueOf(bdayContact.getId()) }; 
    Cursor c = getContentResolver().query(ContactsContract.Data.CONTENT_URI, projection, selection, selectionArgs, null); 
    try { 
     if (c.moveToFirst()) { 
      rawContactId = c.getLong(0); 
     } 
    } finally { 
     c.close(); 
    }