連絡先に誕生日情報を送信しようとしています。連絡先を識別するために 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);
}
このイベントを raw_contact ID なしで ContactData に追加する方法はありますか? また、ニックネームのような他の ContactData についても同じことを行っており、params String[] params = new String[] { String.valueOf(lookupKey), ContactsContract.CommonDataKinds.Nickname の空のカーソルを取得できないという事実は奇妙です.CONTENT_ITEM_TYPE }; 連絡先にニックネームがない場合でも。