如何在没有一年的情况下检索从 Google 通讯录同步的联系人事件?

Posted

技术标签:

【中文标题】如何在没有一年的情况下检索从 Google 通讯录同步的联系人事件?【英文标题】:How can I retrieve contact events synced from Google Contacts without a year? 【发布时间】:2011-10-03 05:27:22 【问题描述】:

我正在使用下面的代码来检索事件和联系人的光标,它对于指定年份的事件工作得很好。不幸的是,此查询不返回仅设置日期和月份的事件。

我在Google Contacts 中为一些联系人的生日设置了这些日期,我想知道是否需要使用 RawContacts 而不是 ContactsContract 来获取这些值?

更新:似乎检索到没有年份输入手机的事件。只有通过http://www.google.com/contacts 添加的事件不会被检索。我可以在联系人应用程序中看到这些事件 - 显示为 --05-23

String[] projection = new String[] 
    ContactsContract.Contacts._ID,
    ContactsContract.Contacts.DISPLAY_NAME,
    Event.CONTACT_ID,
    Event.START_DATE,
    Event.TYPE
;

Cursor c = mContext.getContentResolver().query(
    ContactsContract.Data.CONTENT_URI,
    projection,
    ContactsContract.Data.MIMETYPE + "= ?",
    new String[]  Event.CONTENT_ITEM_TYPE ,
    Event.START_DATE);
c.moveToFirst();

int nameIndex = c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME);
int dateIndex = c.getColumnIndex(Event.START_DATE);

String name, date;
while (c.moveToNext()) 
    name = c.getString(nameIndex);
    date = c.getString(dateIndex);
    Log.d(TAG, "Event for " + name + " is " + date);


c.close();

【问题讨论】:

【参考方案1】:

我在 Nexus S (2.3.4) 上运行,我使用了你的确切代码,我打印了所有联系人,包括没有年份的联系人。

07-19 17:08:36.847: DEBUG/test(24646): Event for Warren Upton is --12-01
07-19 17:08:36.851: DEBUG/test(24646): Event for Marion Atkins is 1934-11-24

您能否详细说明如何重现该问题?

【讨论】:

嗨,杰夫,感谢您对此进行调查。问题实际上似乎只是在google.com/contacts在线编辑的联系人@【参考方案2】:

我猜没有年份的事件没有设置Event.START_DATE(因为根据定义,日期是日/月/年)。如果您将其从投影中移除并排序,它们会被检索到吗?

【讨论】:

没有,恐怕还没有退回来。

以上是关于如何在没有一年的情况下检索从 Google 通讯录同步的联系人事件?的主要内容,如果未能解决你的问题,请参考以下文章

唯一联系人 ID

从完整日期开始推断

2018年的总结和2019年的期望

如何使用Google表格Api V4格式化检索工作表数据

导入一年的每日日期

python如何预测下一年的数据