将ContactsContract.CommonDataKinds.Event添加到Android联系人不会显示

时间:2014-01-02 20:02:17

标签: android contactscontract

我正在尝试向联系人添加生日事件,但在人物应用中显示联系人时,未显示事件。当进入联系人的“编辑”模式时,会显示一个事件,但没有选择日期(请参阅附带的屏幕截图),就好像格式错误一样。

在sqlite查看器中检查contacts2.db时,似乎日期已格式化 很好,就像其他正确显示的事件/生日一样(参见附图。第一行是通过应用程序手动输入的生日,第二行是我的应用程序添加的,未显示)

这是我正在使用的代码,它遵循$ ANDROID_HOME sdk中的SampleSyncAdapter

public ContactOperations addBirthday(Date date) {
    mValues.clear();
    if(date!=null) {
        mValues.put(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);
        mValues.put(ContactsContract.CommonDataKinds.Event.START_DATE, BIRTHDATE_FORMATTER.format(date));
        mValues.put(ContactsContract.CommonDataKinds.Event.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE);
        addInsertOp();
    }
    return this;
}

private void addInsertOp() {

    if (!mIsNewContact) {
        mValues.put(ContactsContract.CommonDataKinds.Phone.RAW_CONTACT_ID, mRawContactId);
    }
    ContentProviderOperation.Builder builder =
            newInsertCpo(ContactsContract.Data.CONTENT_URI, mIsSyncOperation, mIsYieldAllowed);
    builder.withValues(mValues);
    if (mIsNewContact) {
        builder.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, mBackReference);
    }
    mIsYieldAllowed = false;
    mBatchOperation.add(builder.build());
}

enter image description here

enter image description here

1 个答案:

答案 0 :(得分:0)

我刚遇到同样的问题,最后我解决了。 我用其他方式编写了我的代码,但步骤和结果是一样的。

我使用你的日期格式(“YYYY-MM-DD”),它对我来说很好。

ArrayList <ContentProviderOperation> ops = new ArrayList < ContentProviderOperation > ();

ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
        .build());

if (!myDate != null) {
    ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
        .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
        .withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Event.CONTENT_ITEM_TYPE)
        .withValue(ContactsContract.CommonDataKinds.Event.DATA, myDate)
        .withValue(ContactsContract.CommonDataKinds.Event.TYPE, ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY)
        .build());
         }

// Asking the Contact provider to create a new contact                 
try {
        getActivity().getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
    } catch (Exception e) {
        e.printStackTrace();
    } 

我也改变了两个“null's”(也考虑了null的作品):

        .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, "com.google")
        .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, --your google account--)

我希望能帮助你,抱歉我的英语不好。