将生日更新为联系人数据的正确方法是什么?

时间:2015-07-13 11:31:03

标签: android date android-sqlite android-contacts

背景

我正在尝试更新联系人数据,并将每个数据生成日期。

问题

似乎对于我尝试的每个设备(我甚至没有尝试过那么多设备),插入有一个或多个问题:

  • 查看/编辑联系人时,无法点击和编辑brithdate。
  • 在查看/编辑联系人时,所显示的格式与用户下次生日时所显示的格式相同
  • 缺少一年,或完全错误的一年。
  • 查看联系人时,未显示生日,但在编辑时,会显示生日。另外,相反。

我尝试了什么

我尝试使用时间戳和完整的ISO8601格式(因为this link,这意味着它" yyyy-MM-dd HH:mm:ss") 。我也试过" yyyy-MM-dd"我尝试使用设备日期的默认格式。

所有人都有上述问题(每个问题至少有一个)。

这是一段代码:

final Date birthdate = ...
// String birthdateStr = new SimpleDateFormat("yyyy-MM-dd").format(birthdate);
// String birthdateStr = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.getDefault()).format(birthdate);
// String birthdateStr = new SimpleDateFormat(((SimpleDateFormat) java.text.DateFormat.getDateInstance(java.text.DateFormat.DEFAULT, Locale.getDefault())).toLocalizedPattern(),Locale.getDefault()).format(birthdate);


String birthdateStr = Long.toString(birthdate.getTime()/1000);
final Builder builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
builder.withValue(Data.RAW_CONTACT_ID, ...)
       .withValue(ContactsContract.Data.MIMETYPE, Event.CONTENT_ITEM_TYPE)
       .withValue(ContactsContract.CommonDataKinds.Event.START_DATE, birthdateStr)
       .withValue(ContactsContract.CommonDataKinds.Event.TYPE,
                    ContactsContract.CommonDataKinds.Event.TYPE_BIRTHDAY);

当然,我也在这里查看了这个问题,并发现了类似的问题,但提出的解决方案似乎都没有奏效。

问题

我应该如何将生日插入联系人?为什么每个设备都有自己的方式来解释日期?什么是生日的正确标准?

1 个答案:

答案 0 :(得分:7)

基于this answer,我会说您应该使用YYYY-MM-DD格式,但您需要定义帐户类型和帐户名称。所以添加这些行:

.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)

如果有帮助,请告诉我。