如何将私人数据附加到 android 日历事件

Posted

技术标签:

【中文标题】如何将私人数据附加到 android 日历事件【英文标题】:How attach private data to android calendar event 【发布时间】:2012-02-20 13:11:53 【问题描述】:

我们如何将一些额外的数据附加到日历事件中,例如文件、照片、简单的字符串等......

我使用了扩展属性并且能够通过扩展属性插入一些额外的数据

Uri extendedProperties=Uri.parse("content://com.android.calendar/extendedproperties");
ContentValues extendedValues=new ContentValues();
extendedValues.put("event_id", id);
extendedValues.put("name",key);
extendedValues.put("value",value);
getApplicationContext().getContentResolver().insert(extendedProperties, extendedValues);

然后能够像下面这样检索该数据

Uri extentdedProperties=Uri.parse("content://com.android.calendar/extendedproperties");
CursorextendedPropertires Cursor=getContentResolver().query(extentdedProperties,null,"event_id = "+Id +",null,null);

它适用于 android 2.2 ... 如果在 android 4.0(冰淇淋三明治)中测试,代码相同。它抛出一个错误,说只有同步适配器可以访问 content://com.android.calendar/extendedproperties。

所以我将查询作为“callerissyncadapter”执行。现在我可以插入扩展属性。但是一旦事件同步到服务器,服务器就会删除扩展属性。

日历提供者(谷歌除外)也不完全支持这些扩展属性

除了扩展属性之外,还有什么方法可以将一些额外的数据附加到日历事件,或者我们可以更好地利用这些扩展属性。

【问题讨论】:

【参考方案1】:

除非你真的是同步适配器,否则不要使用 callerissyncadapter。将此设置为 true 将导致设备上的内容观察者不会收到有关该提供程序中内容更改的通知,并且您的更改不会持久保存到服务器。

你为什么要这样做?您是否正在尝试将您的应用的一些数据与日历事件相关联?

如果是这样,为什么不使用您的应用程序创建您自己的私有数据存储(或内容提供程序),并通过日历内容提供程序中的事件键索引您的额外属性?这样,您的应用数据与公共联系人内容提供商数据之间就有关联。

【讨论】:

没有可靠的方法将事件的密钥保存在私人商店中。如果您删除并再次添加事件的帐户,则事件的 _id 和 _sync_id 都可能会更改,例如Exchange 类型的帐户。

以上是关于如何将私人数据附加到 android 日历事件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android 中添加日历事件?

如何使用android中的回收器视图将事件放在日历中[重复]

如何使用离子电容器将事件添加到移动设备的日历

在 android 中以编程方式使用谷歌日历添加同步事件

如何将日历邀请附加到 SES send_raw_email?

从数据库获取事件并放置日历视图(android)