.net平台手机管理软件开发(7)——IrMC简介

** (七) ** ** IrMC ** ** 简介 **

要实现通讯薄、日历、便签的同步,需要用到 IrDA 协议里面的 IrMC 部分。

IrMC 全称为 Ir Mobile Communications 。它定义了利用 IR 无线传输的设备之间通讯的规则。 IrMC 协议文档详细叙述了 IrMC 的方方面面,可以在我的主页 (http://dream-world.nease.net) 下载到 PDF 版本。

下面主要讲述我在开发当中所用到的部分以及实现方法。更为详细的资料请参考 IrMC 协议。

** Phonebook **

在手机软件桌面端通讯薄的管理是整个软件的必备功能之一,利用其信息可以方便的和 Outlook 等软件实现同步,实现更强大的功能。

通讯薄的管理分为读取、删除、增添、修改。通过这几个功能的组合可以实现更为强大的同步功能。下面分条概述。

l ** 读取 **

n ** 读取所有的 Entry
** 使用 OBEX 的 GET 命令取得 \telecom\pb.vcf 文件。
得到的的文件是一个 vCard 文件,里面包含了所有的通讯薄。其格式为 vCard 格式。关于 vCard 的简介及编码器解码器见后。下面给出一个范例: **
** BEGIN:VCARD
VERSION:2.1
X-IRMC-LUID:1017646
X-ESI-CATEGORIES;CHARSET=UTF-8;ENCODING=QUOTED-PRINTABLE:=E5=AE=B6=E4=BA=BA
N:test
ADR:;;Street;city;;610000;country
ORG:company
TEL;HOME:123456
TEL;WORK:123456
TEL;CELL:123456
TEL;FAX:123456
TEL;FAX;HOME:123456
EMAIL;INTERNET:[email protected]
EMAIL;HOME;INTERNET:b@g
URL:http
BDAY: 1985-04-23
END:VCARD
也可以通过 X-IRMC-LUID 所给的 LUID 号码直接取得相应的 vCard 。

1. ** 读取指定 LUID ** ** 的 Entry
** 使用 OBEX 的 GET 命令取得 \telecom\pb\luid\xxxx.vcf ,其中 xxxx 代表了 LUID 号码。
得到的依然是一个 vCard 文件,只不过只包含特定 LUID 号码的 vCard 信息。可以简单的通过 Outlook 查看 vCard 所包含的信息。

l ** 删除
** 欲删除一个 Entry ** **

** 1. ** 连接到 IrMC_Sync_Service (发送 0x80, 0x0, 0x13, 0x10, 0x0, 0x40, 0x6, 0x46, 0x0, 0xC, 0x49, 0x52, 0x4D, 0x43, 0x2D, 0x53, 0x59, 0x4E, 0x43 )使手机处于同步状态。 ** **

** 2. ** 得到 ChangeCount ** **

ChangeCount 是手机里面储存修改次数的一个数值,主要用于同步。具体相关资料请参考 IrMC 协议。

** 3. ** 构建数据包。
Opcode : PUT
NameHeader : xxxx.vcf ( xxxx 为欲删除的 entry 的 LUID)
AppParam : 0x11 , ChangCount 字符串形式长度( Integer ), ChangeCount 的 ANSI 形式 ** **

** 4. ** 使用 OBEX 的 PUT 命令,传输一个 xxxx.vcf(xxxx 指 LUID) 空文件到 \telecom\pb\luid 覆盖即可。 ** **

** 5. ** 发送 0x81, 0x0, 0x3 断开 IrMC_Sync_service ** **

l ** 添加
** 欲添加一个文件:

** 1. ** 连接到 IrMC_Sync_Service

** 2. ** 得到 ChangeCount

** 3. ** 构建数据包
Opcode : PUT
NameHeader : .vcf
AppHeader : 0x11 , ChangeCount 字符串长度 (Interger) , ChangCount 的 ANSI 形式
Body 或者 End-of-Body Header : vcf 文件内容

** 4. ** OBEX 的 PUT 命令上传到 \telecom\pb\.vcf 文件即可。 **
** ** 注意: ** 文件名取名为“ .vcf ”。

** 5. ** 发送 0x81, 0x0, 0x3 断开 IrMC_Sync_service ** **

l ** 修改
** 修改过程与添加过程相似,只是将文件名改为欲修改的 vCard 的 LUID.vcf 就行了。 ** **


** Notes **

便签是大多数手机都提供的功能,能够方便的记录简短的信息。在我的 M55 手机上能够储存 150Byte 的信息,也就是 150 个英文或者 75 个汉字。软件通过管理便签可以与 Outlook 等软件同步,实现更高级的功能。

管理 Notes 的方法和 Phonebook 类似。得到全部 Notes 的 vNote 只需要获取 \telecom\nt.vnt 即可。删除、添加、修改只需要把 \telecom\pb\luid 改为 \telecom\nt\luid 即可。在此不再赘述。

** Calendar
** 日历功能提供了事件提醒功能,分为重要记事 (vEvent) 和任务 (vTodo) 。通过管理日历,同样可以实现和 Outlook 同步,实现电脑和手机的同步。

管理 Calendar 的方法和 Phonebook 类似。得到全部 vCalendar 只需要获取 \telecom\cal.vcs 。删除、添加、修改只需要把 \telecom\pb\luid 改为 \telecom\cal\luid 即可。在此不再赘述。

但值得注意的是 vCalendar 的结构

BEGIN:VCALENDAR

VERSION:1.0

BEGIN:VEVENT

….

END:VEVENT

BEGIN:VTODO

END:VTODO

END:VCALENDAR

完整的 vCalender 包含了至少一个 vEvent 或者一个 vTodo ,因此在添加、修改 vEvent 、 vTodo 时要将其补充为一个完整的 vCalender 结构,否则服务端会拒绝操作。

遇到的问题:

在实际操作中,遇到问题最多的地方在 Phonebook 部分。我的手机第一次同步的时候经常出现数据库被锁的情况,用 SiMoCo 读取也是一样,说明是手机拒绝写操作。这时候关闭手机再重新启动就好了。至于原因,我还没有搞清楚,希望能有高人指点。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus