如何正确地在联系人信息中输入出生日期?

14

背景

我正在尝试更新联系人数据,并在其中添加每个人的出生日期。

问题

似乎对于我尝试的每个设备(我并没有尝试那么多设备),插入都存在以下一个或多个问题:

  • 在查看/编辑联系人时,无法单击和编辑出生日期。
  • 在查看/编辑联系人时,显示的格式与用户输入的格式不同。
  • 缺少年份,或者完全错误的年份。
  • 在查看联系人时,出生日期未显示,但在编辑时显示。反之亦然。

我尝试过的方法

我尝试使用时间戳和完整的 ISO8601 格式(因为根据 这个链接,它是 "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个回答

7

根据这个答案,我建议您使用YYYY-MM-DD的格式,并且需要定义账户类型和账户名称。因此,请添加以下行:

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

请告诉我这是否有帮助。


你有检查过吗?它真的很好用吗?请在多个安卓设备上尝试一下,因为我已经尝试过这种格式了。 - android developer
正如我所写的,这并不起作用。为什么你们在没有检查它的情况下就点赞了呢?例如,在Nexus 4上,当编辑联系人时,我无法编辑出生日期(单击它时没有任何反应)。我需要将其删除并重新添加。 - android developer
起初,很抱歉我没有早些回复。我查看了文档,也研究了其他人的做法。在哪些设备上它无法工作?你提到了 Nexus 4,你是指原版的 ROM 吗?是哪个版本?对于 Nexus 设备,相关的代码应该是开源的。你确定这不仅仅是一种特定于设备的错误吗?我知道在 Gingerbread 设备上有数十个字体颜色错误(只是举例)。 - rekire
我已在多个设备上进行了测试:2个Nexus 4(一个运行Kitkat,一个运行Lollipop),LG G2运行4.2,HTC One M8(Lollipop),Galaxy S4(Lollipop)等。所有设备均为原装系统。对于我尝试过的所有解决方案,至少有一个设备存在问题。我在此报告的是运行Kitkat的Nexus 4。 - android developer
它是如何得到+6个赞的?所有这些人都没有测试吗?:( 无论如何,我不在乎分数,但问题是我仍然没有得到解决方案... - android developer
我可以确认,这个代码突出了使用ContentProviderOperation添加事件的正确内容和(几乎)字符串格式化。在运行7.x的Pixel和Nexus 5上进行了测试。我将格式化程序更改为yyyy-MM-dd。 - ninehundreds

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接