J2ME Personal Information Management概览

日期: 2010-09-08 作者:Soma Ghosh 来源:TechTarget中国 英文

  移动环境中的 Personal Information Management (PIM)

  随着新设备不断上市,在移动设备上提供Address Book、Calendar和Task List成为了一项必然的要求。J2ME应用程序也需要访问这些数据。可选包JSR 75 Personal Information Management (PIM)提供了这个功能。

  它不仅允许访问包含联系人、约会和任务的本地个人信息,还允许访问基于附加到设备上的SIM卡和Local and Remote Personal Information 数据库的信息。

  PIM包支持从vCard和vCalendar导入和导出数据,vCard和vCalendar分别是Address Book和Calendar的Internet标准格式。它还拥有阻止未授权类检索个人信息的安全特性。

  另一个可选包JSR 75 File Connection提供一种访问本文探讨范围之外的本地文件系统的方法。

  J2ME PIM包

  Java PIM包通过javax.microedition.pim包表示。

  这个包定义的重要接口包括:

  •   Contact——这个接口表示Address Book上的单个联系人。
  •   ContactList——这个接口表示Address Book,这是一个Contact列表。
  •   Event——这个接口表示单个Calendar Event。
  •   EventList——这个接口表示一个Calendar事件列表。
  •   ToDo——这个接口表示Task List中的单个Task。
  •   ToDoList——这个接口表示Task列表。

  这个包定义的主要类是:

  PIM——PIM类定义一些方法,用于创建一个所有现有列表的索引,打开并编辑那些列表,将其作为来自vCard和vCalendar(Contact和Calendar的Internet标准)的导入或导出。

  Contact和ContactList

  一个 Contact表示Address Book中的单个条目。Contact中的主要字段是Name、Address、Email、Birthday、Photo和Telephone。

  为了确保跨平台可移植性,建议使用Super Interface PIMList提供的方法isSupportedField()。

  清单 1 展示如何向Address Book添加一个Contact:

  清单 1. 将Contact添加到Address Book
    

以下是引用片段:
ContactList addressBook = null;
 try {
    addressBook = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, 
                                                                     PIM.READ_WRITE);
 } catch (PIMException e) {
    // Exit Application
 }
Contact singleContact = addressBook.createContact();
String[] name = new String[addressBook.stringArraySize(Contact.NAME)];
if (addressBook.isSupportedField(Contact.NAME_FORMATTED)
 singleContact.addString(Contact.NAME_FORMATTED, 
                        PIMItem.ATTR_NONE, “Mrs. Jane Doe”);
The createContact() method creates a temporary empty Contact. A commit() call makes 
the Contact data persistent. It is advisable to close the lists by invoking the close()
 method after necessary operations have been performed.
try {
      singleContact.commit();
 } catch (PIMException e) {
      // Exception occured
 }
try {
// Other cleanup tasks
      addressBook.close();
 } catch (PIMException e) {
 }

  Event和Event List

  一个Event表示Event数据库中的单个条目,比如,移动设备上的日历。Event中的关键字段是Location、Summary、Start date、End Date和Alarm notification。清单 2 展示如何向Event数据库添加一个Event。

  清单 2. 添加一个 Event
    

以下是引用片段:
EventList eventList = null;
 try {
    eventList = (EventList) PIM.getInstance().openPIMList(PIM.EVENT_LIST, 
                                                            PIM.READ_WRITE);
 } catch (PIMException e) {
    return;
 }
 Event singleEvent = eventList.createEvent();
 if (eventList.isSupportedField(Event.SUMMARY))
      singleEvent.addString(Event.SUMMARY, PIMItem.ATTR_NONE, “Java Training”);
 if (eventList.isSupportedField(Event.START))
      singleEvent.addDate(Event.START, PIMItem.ATTR_NONE, aDate.getTime());
 if (eventList.isSupportedField(Event.END))
      singleEvent.addDate(Event.END, PIMItem.ATTR_NONE, aDate.getTime());
try {
      singleEvent.commit();
 } catch (PIMException e) {
      // An error occured
 }
 try {
      eventList.close();
 } catch (PIMException e) {
 }

  ToDo和ToDo List

  ToDo接口表示移动设备上的Task数据库中的单个任务,重要的字段是Note or Summary、Priority、Completion Date、Due Date和whether completed。清单3展示如何向数据库持久化添加一个ToDo。

  清单 3. 添加一个 Task
    

以下是引用片段:
ToDoList tasks = null;
 try {
    tasks = (ToDoList) PIM.getInstance().openPIMList(PIM.TODO_LIST, 
                                                        PIM.READ_WRITE);
 } catch (PIMException e) {
    // An error occurred
    return;
 }
 ToDo singleTask = tasks.createToDo();
 if (tasks.isSupportedField(Event.SUMMARY))
      singleTask.addString(ToDo.SUMMARY, PIMItem.ATTR_NONE, “Shopping for Halloween”);
 if (tasks.isSupportedField(Event.DUE))
      singleTask.addDate(ToDo.DUE, PIMItem.ATTR_NONE, new Date().getTime());
try {
      singleTask.commit();
 } catch (PIMException e) {
      // An error occured
 }
 try {
      tasks.close();
 } catch (PIMException e) {
 }

 
  PIM与RMS的区别

  在继续讨论之前,我们先回顾一下J2ME提供的另一个关键功能,Record Management Store(RMS)概念。RMS允许J2ME应用程序持久地本地存储数据。RMS包含以下组件:

  Records——与每条记录拥有一个或多个字段的数据库系统不同,RMS中的一条Record是一个单独的数据字段。它没有一个预先定义的数据类型或大小,可以包含任意数据。

  RecordStore——RecordStore是一个Records集合,可以通过J2ME应用程序根据名称访问。

  以下是PIM和RMS的区别,尽管二者都负责在设备上存储持久数据。

  PIM向(从)Address Book、Calendar和Task List等已定义的实体存储(和检索)数据。而另一方面,RMS向(从)一个常规数据库存储(和检索)数据。PIM中的单个实体是一个Contact、Calendar条目或一个Task,而在RMS中,单个实体是一个字节数组。

  PIM并不局限于本地设备,它可以访问一个附加SIM或另一个远程设备中的数据。RMS只能访问本地设备中的数据。PIM可以从vCalendar或vContact等外部源导入或导出,而RMS没有任何Export或Import功能。与RMS相比,PIM中的数据解释更加灵活。例如,一个Contact(以标准格式定义)总是可以由另一个J2ME应用程序轻松解释。而RMS中的记录是字节数组,其他J2ME应用程序需要拥有关于如何解释它的信息。

  一个示例——添加一个联系人

  在这个小节中,我们将讨论此前提到过的一个方法addContact(),展示如何向Address Book添加一个联系人。当在表单中提交一个用户命令时,这个方法(见清单4)将在一个单独的线程中调用。这个方法访问通过UI Textfields字段输入的数据。

  清单 4. addContact()方法
    

以下是引用片段:
// Import
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
import javax.microedition.pim.*;

// Text input
TextField nameField;
TextField phoneField;

public void addContact () {
    ContactList contacts = null;
 try {
     contacts = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, 
                                                                PIM.READ_WRITE);
 } catch (PIMException e) {
     // An error occurred
     e.printStackTrace();
  }
  Contact contact = contacts.createContact();
  String[] name = new String[contacts.stringArraySize(Contact.NAME)];
  if (contacts.isSupportedArrayElement(Contact.NAME, Contact.NAME_GIVEN))
        name[Contact.NAME_GIVEN] = nameField.getString();
   if (contacts.isSupportedField(Contact.TEL))
      contact.addString(Contact.TEL, Contact.ATTR_HOME, phoneField.toString());
try {
  contact.commit();
  
} catch (Exception e) {}

 }

  运行时和安全问题

  PIM MIDlet应该在一个支持PIM的配置(即JSR 75)中运行。我们通过在Sun的Wireless Toolkit 2.5上先单击Settings然后单击API Selection来选择以下设置。选择PIM MIDlet要运行的移动设备时使用相同的方法。

图 1. PIM MIDlet Runtime API Selection

图 1. PIM MIDlet Runtime API Selection

  MIDlet需要其他权限才能读写Contacts、Calendar或Task Lists,可以通过在Wireless Toolkit中单击Settings并选择Permissions来设置相关权限。这里提供了用ContactList、EventList和TodoList的所有Read和Write权限。

图 2. PIM MIDlet 安全问题

图 2. PIM MIDlet 安全问题

  结束语

  在本文中,我们讨论了J2ME中的另一个重要功能Personal Information Management(PIM),该功能允许访问移动设备上形式为Contact、Task和Event的本地数据。本文还比较了PIM和RMS,后者是处理设备数据的另一个功能。现在,您可以通过PIM自带的导入和导出功能同步J2ME应用程序和vCard以及vCalendar,后两者分别是Contact和Calendar的Internet标准格式。最后,我们介绍了运行时的安全和部署要求。

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

相关推荐

  • 详解基于J2ME平台下SOAP协议的应用

    目前企业应用正在向面向Web服务的SOA架构转变,嵌入式系统与企业应用系统的连接目前还处于TCP/IP协议、HTTP协议等比较初级的阶段。

  • 企业如何用好中间件(二)

    CBSD的主要优点之一是重用,它的目标是代码、设计、解决方案都能重用。而设计模式是设计经验的记录,利用它可以达到事半功倍的效果。目前己有几十种设计模式可供参考……