android - 通过联系人选择器向 Android 中的 ContactsContract.CommonDataKinds.Event 添加事件

标签 android events android-contacts contactscontract

在我的 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/

相关文章:

JavaScript - 如何添加动态传递特定值的 onclick 事件?

android - 图库事件到 "when image centered"

android - 非法状态异常 : couldn't move cursor to position

android - CustomContact 插入时出现 NullPointerException

java - 使用 ArrayAdapter 时无法解析构造函数

r - R中tcltk tktext中的重写事件

Android:点击按钮时转到 HTTP 网址

android - 无法使用 ContentProvoider 更新联系人

android - 如何在 Activity 的父 Activity 被销毁时保持 Activity 存活

android - 获取带有改造的网站的 html - Android?