当前位置: 代码迷 >> 综合 >> BlackBerry 应用程序开发者指南 第二卷:高级--第3章 集成PIM功能
  详细解决方案

BlackBerry 应用程序开发者指南 第二卷:高级--第3章 集成PIM功能

热度:69   发布时间:2023-12-09 06:57:46.0

PIM API

Java个人信息管理(Personal Information Manager,PIM) API(javax.microedition.pim)以及BlackBerry PDAP(Personal Digital Assistant Profile) API(net.rim.blackberry.api.pdap)允许你访问BlackBerry设备上的日历,任务,以及地址本.
注:在4.0版本里,net.rom.blackberry.api.pim包是不赞成使用的. 现在这个包里的类在javax.microedition.pim and net.rim.blackberry.api.pdap里可以得到.

PIM类是一个抽象类,它提供了访问BlackBerry设备上的PIM数据的方法.

获取一个PIM对象

调用PIM.getInstance().

注:当你的应用程序第一次访问PIM API时,它将检查一个ControlledAccessException.如果系统管理员使用应用程序控制限制访问PIM API,一个运行时异常将会抛出.为获取更多信息,参看”BlackBerry应用程序开发者指南 第2卷:高级 第一卷:基础”.

PIM列表

PIM列的接口代表了所有联系人,事件以及任务列的常用功能.一个列包含0个或多个项,它们是PIMItem的子类.使用PIM列组织相关项,并且获取一些或所有列表的项.
注:在BlackBerry设备里,每个ContactList,ToDoList或EventList实例都会涉及到BlackBerry设备上的本地数据库.第三方应用程序不能创建自定义的列表.

PIM项

PIMItem接口代表了一个列项常用的功能.Contact,Event,以及ToDo接口扩展了PIMItem.一个PIM项代表了单个入口的数据集合,例如一个约会或者一个联系人.

当你在一个指定的PIM列表上创建一个PIM项时,自从它存在开始,此项仍保留了和列表的关联.你也可以使用标准的格式,例如iCal和vCard,导入或导出PIM项里的数据.

字段

一个PIM项在字段里存储数据.每个PIMItem接口-Contact,Event,或ToDo-为每个支持的字段定义了唯一的ID.例如,Contact接口定义字段来存储一个internet消息地址(EMAIL),姓名(FORMATTED_NAME),以及电话号码(TEL).

在你试图设置或获取字段值之前,调用PIMList.isSupportedField(int)来确认是否支持方法.

一个字段可能有一个与之关联的具有描述性的标签显示给用户.为获取这个字段的标签,调用PIMList.getFieldLabel(int).

每个字段都有一个数据类型ID,例如INT,BINARY,DATE,BOOLEAN,或STRING.为了得到一个字段的数据类行,调用PIMList.getFieldDataType(int).

数据类型决定了你将使用哪一个方法得到或设置字段数据.例如:

如果字段的数据类型为STRING,为了加入一个值,调用PIMItem.addString(String).
为了改变已经存在的值,调用PIM.setString(String).
为了获取一个字段值,调用PIMItem.getString(). 
监听者

当列表里的一个项发生变化时,你的PIMListListener接口实现会收到这个通知. PIMListListener接口提供了下面的方法:

方法

描述

itemAdded(PIMItem)

当加入一个项到列表时调用.

item.Removed(PIMItem)

当从列表里删除时调用.

itemUpdated(PIMItem,PIMItem)

当一个项发生变化时调用.



ContactList cl = (ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.WRITE_ONLY);

((BlackBerryPIMList)cl).addListener(

       new PIMListListener() {

           public void itemAdded(PIMItem item) {

              System.out.println(" ITEM ADDED: " +

                     ((Contact)item).getString(Contact.UID, 0));

              }

          

           public void itemUpdated(PIMItem oldItem, PIMItem newItem) {

              System.out.println(" ITEM UPDATED: " +

                      ((Contact)oldItem).getString(Contact.UID, 0) + " to " +

                     ((Contact)newItem).getString(Contact.UID, 0));

              }

          

           public void itemRemoved(PIMItem item) {

              System.out.println(" ITEM REMOVED: " +

                     ((Contact)item).getString(Contact.UID, 0));

              }

});


注:监听者仍然保持和BlackBerry设备数据库的关联,甚至是在相应的PIMList对象已经删除之后.为了删除一个监听者,调用BlackBerryPIMList.removeListener().

远程地址查询

支持远程地址查询的应用程序应该实例化BlackBerryContactList接口.此节口扩展了ContactList接口,并且提供了下面额外的方法:

方法

描述

choose(Contact, int, boolean)

启动地址本以至用户可以选择一个地址.

void lookup(Contact, RemoteLookupListener)

初始化一个远程查询.

void lookup(String, RemoteLookupListener)

初始化一个远程查询.

RemoteLookupListener接口提供了一单个方法,items(),此方法返回一个远程地址查询结果的迭代.

使用地址簿

使用一个ContactList的实例增加或查看BlackBerry设备地址簿的联系人信息.创建Contact对象存储单独的联系人信息,此信息包含姓名,电话号码,Email,以及街道地址.

BlackBerry特定的地址字段

BlackBerryContact接口扩展了Contact,为了访问BlackBerry联系人特定的字段, 它定义了下面的常数:

常量

描述

BlackBerryContact.PIN

访问PIN字段.

BlackBerryContact.USER1 到 USER4

访问USER1到USER4字段.

为了定义USER1到USER4字段的标签,调用BlackBerryPIMList.setFieldLabel().

此改变立即生效.你不必要提交改变.
注:改变一个标签将影响所有BlackBerry设备上的联系人.

打开一个联系人列表

在你增加联系人之前,你必须创建一个联系人列表.调用PIM.openPIMList().将列表的类型作为参数提供给open(PIM.CONTACT_LIST),并且提供访问模式(READ_WRITE,READ_ONLY,或WRITE_ONLY)打开列表.

如果你正在为BlackBerry设备专门编写一个应用程序,将你的联系人列表转化为BlackBerryContactList,因为此接口提供了一个附加的方法来支持远程地址查询.为了让一个应用程序可以跨多个兼容的Java ME BlackBerry设备,使用PDAP实现.

ContactList contactList = null;

try {

    contactList = (ContactList)PIM.getInstance().openPIMList(

                          PIM.CONTACT_LIST, PIM.READ_WRITE);

}

catch (PimException e) {

    return;

}



注:联系人不会加到数据库中,直到你提交它.为获得更多信息,参看30页的”保存一个联系人”.

创建一个联系人

调用联系人列表的createContact().

Contact contact = contactList.createContact();

增加联系人信息

Contact类定义了保存数据的字段,例如Contact.Name,Contact.ADDR,以及Contact.TEL.每个字段都有一个特定的数据类型,你可以调用PIMList.getFieldDataType(int)来获取它们.由于依赖字段的数据类型,通过调用下列方法创建一个新值: addString(), addStringArray(), addDate(), addInt(), addBoolean(), 或addBinary().

在你设置和获取一个字段之前,为了验证列表项是否支持字段,调用:

ContactList.isSupportedField(int)

通过使用属性来区分其值,某些字段可以存储多个值.例如,TEL字段支持ATTR_HOME,ATTR_WORK,ATTRMOBILE和ATTR_FAX属性存储工作,家庭,移动以及传真号码.

为了判断一个字段最多支持几个值,调用PIMList.maxValues(int field).

此方法返回支持的值的个数,返回-1意味着可以增加任意个数的值.为了验证一个字段是否支持特定的属性,调用isSupportedAttribute(int, int).

// Create string array for name.

try {

    ContactList contactList = (ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.WRITE_ONLY);

}

catch (PIMException e)

{  

}



Contact contact = contactList.createContact();

String[] name = new String[5]; // 5 name elements

try {

    name[Contact.NAME_PREFIX] = "Mr.";

    name[Contact.NAME_FAMILY] = "McPherson";

    name[Contact.NAME_GIVEN] = "Scott";

    }

catch (IllegalArgumentException iae) {

    // handle exception

}





// Add name.

if(contactList.isSupportedField(Contact.NAME)) {

    contact.addStringArray(Contact.NAME, Contact.ATTR_NONE, name);

}



// Create string array for address.

String[] address = new String[7]; // 7 address elements

try {

    address[Contact.ADDR_COUNTRY] = "United States";

    address[Contact.ADDR_LOCALITY] = "Los Angeles";

    address[Contact.ADDR_POSTALCODE] = "632300";

    address[Contact.ADDR_REGION] = "California";

    address[Contact.ADDR_STREET] = "323 Main Street";

    }

catch (IllegalArgumentException iae) {

// Handle exception.

}



// Add address.

contact.addStringArray(Contact.ADDR, Contact.ATTR_NONE, address);



// Add home telephone number.

if (contactList.isSupportedField(Contact.TEL) &&

    contactList.isSupportedAttribute(Contact.TEL, Contact.ATTR_HOME))

{

    contact.addString(Contact.TEL, Contact.ATTR_HOME, "555-1234");

}



// Add work telephone number.

if (contactList.isSupportedField(Contact.TEL)) {

    contact.addString(Contact.TEL, Contact.ATTR_HOME, "555-5555");

}



// Add work internet messaging address.

if (contactList.isSupportedField(Contact.EMAIL)) {

    contact.addString(Contact.EMAIL,

                     Contact.ATTR_WORK,

                     "aisha.wahl@blackberry.com");

}

修改联系人信息

对于仅支持一个值的字段,调用合适的set方法用一个新值替代

  相关解决方案