在我的 Android 应用程序的 Activity 中,我想打开内容选择器。当用户选择其中一个联系人时,应该有一个新条目(类型为“other”的事件)插入到表 ContactsContract.CommonDataKinds.Event 中。
启动联系人选择器 Intent 很容易。但是随后必须为所选联系人获取一些数据并在事件表中创建一个新条目。这是我目前的代码,不幸的是它不起作用:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_ID:
Uri contactData = data.getData();
//String contactID = contactData.getLastPathSegment();
// ADD A NEW BIRTHDAY FOR THE SELECTED CONTACT START
ContentValues values = new ContentValues();
values.put(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
values.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_OTHER);
values.put(ContactsContract.CommonDataKinds.Event.CONTACT_ID, 250);
values.put(ContactsContract.CommonDataKinds.Event.START_DATE, "2012-12-12");
Uri dataUri = getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
// ADD A NEW BIRTHDAY FOR THE SELECTED CONTACT END
break;
}
}
}
此代码需要权限“WRITE_CONTACTS”。
联系人 ID“250”是硬编码的。当然,它应该从与联系人选择器的结果一起发送的 Intent 数据中检索。
上面的代码以 NullPointerException 结束。为什么会这样?我如何从 Intent 中获取联系人的 ID,以便我可以使用它来插入新行?
编辑:此外,行 ...
getContentResolver().insert(ContactsContract.Data.CONTENT_URI, values);
... 抛出异常。哪里出了问题?
最佳答案
这里是如何做的,假设这是你调用联系人选择器的方式:
int CONTACT_PICKER_ID = 1001; //some arbitrary number that you choose
Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivity(intent, CONTACT_PICKER_ID);
data.getData() 调用返回一个查找键,您必须查询联系人数据库以查找联系人的 ID。
if (resultCode == RESULT_OK) {
switch (requestCode) {
case CONTACT_PICKER_ID:
Cursor cursor = managedQuery(data.getData(), null, null, null, null);
cursor.moveToFirst();
//get the contact's ID
contactId = Cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
...
contactId 包含您想要的 ID。
关于android - 通过联系人选择器向 Android 中的 ContactsContract.CommonDataKinds.Event 添加事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8843895/