Monthly Archives: January 2009

GMobileSync开发环境搭建

前期的准备工作。 首先,搭建Windows Mobile开发平台,很简单,依次装下面这些软件就可以了。 Microsoft Outlook 2 003。(Microsoft ActiveSync依赖它) Microsoft ActiveSync 4.5。(用于同步手机和模拟器) Visual Studio .Net 2005。(安装C#的时候要选上smart device) Windows Mobile 5.0 Pocket PC SDK。(GMobileSync采用WM5.0的SDK) .NET library for the Google Data API。 打开GMobileSync工程,在项目的References中,引用了 Google.GData.AccessControl Google.GData.Calendar Google.GData.Client Google.GData.Extensions 如果引用无效,则重新在菜单Project -> Add References里面添加一下引用,对应的DLL文件在C:\Program Files\Google\Google Data API SDK\Redist\Mobile\WindowsMobile目录下。 第二步,如何调试。选择菜单Debug -> Start Debugging 之后会出现deploy对话框。如果你有手机并已经连线,你可以选择Windows Mobile 5.0 PocketPC Device ,或者你也可以选择Windows Mobile 5.0 PocketPC [...]

使用Google data api的技巧

在google data api源代码目录下有unitest,这里的很多测试用例的代码中就包含了很多使用的例子。 另外,把查询到的entry使用SaveToXml方法存为文件也可以帮助分析。 StreamWriter stream = new StreamWriter("d:/gcal/" + entry.Title.Text +        ".xml", false, System.Text.Encoding.UTF8);XmlTextWriter writer = new XmlTextWriter(stream);writer.Formatting = Formatting.Indented;writer.WriteStartDocument(false);entry.SaveToXml(writer);writer.Flush();writer.Close();stream.Close();

GMobileSync出现事件重复的bug

很奇怪,怎么今天才发现这个bug。Outlook中新建一个Appointment,同步到GoogleCalendar,然后马上再同步一次,Outlook中就会出现两个同样的事件,但第三次同步就不会出现更多的重复了。 调试之后找到了原因:新建的Appointment同步到GoogleCalendar时使用的queryUri是"http://www.google.com/calendar/feeds/default/private/full",同步完返回的EventEntry的absoluteUri的形式为http://www.google.com/calendar/feeds/default/private/full/9ess8r22fljetplumv3rkmfitk然后程序把Appointment的id和EventEntry的absoluteUri存入GMobileSync.xml用于下次同步时使用。在下一次的同步中,先从gCal中获取所有的Event,这个被新加到gCal的事件的absoluteUri将变成如下的形式:http://www.google.com/calendar/feeds/username%40gmail.com/private/full/9ess8r22fljetplumv3rkmfitk这样,在上次同步的列表中将找不到这个absoluteUri对应的AppointmentID。于是程序误认为这是一个新Event,于是就在本地新建一个Appointment,然后把AppointmentID和这个absoluteUri保存到GMobileSync.xml中。所以,第三次同步就不会再有重复。 不知道为何今天才发现这个错误,我之前的使用过程中不可能没出现过这样的操作,但是没遇到过这样的现象。难道Google DataAPI调整了插入Event时的返回值? 解决办法比较简单,因为absoluteUri的改变不过是把default换成了你的email账号。你可以把absoluteUri存入GMobileSync.xml之前先手动把default转换一下。不过我换了另外一个更简单的方式,只保存absoluteUri的最后一部分:9ess8r22fljetplumv3rkmfitk。当然,理论上会有重复的可能。比如我的gCal中添加了别人的Calendar,那么下载下来的event可能和我Calendar里面的event有同样的后缀。不过,概率太太太小了。 GMobileSync还有很多可以改进的地方,比如指定下载的Calendar以及指定默认把事件添加到哪个Calendar。有空再加上这个功能。