-->

添加ContactsContract.CommonDataKinds.Event到Android通讯

2019-10-19 04:09发布

我想一个生日事件添加到联系人,但显示在联系人应用的接触时,事件不会显示出来 。 当进入接触的“编辑”模式下,事件不会显示出来,但是没有指定日期(详见附截图)仿佛格式错误。

当在源码浏览器检查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());
}

Answer 1:

I`ve刚刚有同样的问题,最后我已经解决了它。 我写我的代码以其他方式做到这一点,但步骤和结果都是一样的。

我用你的日期格式(“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();
    } 

我也同时改变“空的”的操作(虽然具有空的作品太):

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

希望能帮到你,对不起我的英文不好。



文章来源: Adding a ContactsContract.CommonDataKinds.Event to Android contacts, does not show up