术语汇编 J2ME PIM概论

开发 前端
本文向大家简单介绍一下J2ME PIM的概念,PIM的意思是personal infomation management(个人信息管理),主要是针对用户的重要信息,例如通信录、提醒、日程等。

这里和大家分享一下J2ME PIM的概念,根据JSR75的定义,Personal Information Management(PIM)API提供了一种访问移动设备上的本地个人数据的方法,这些数据包括Contacts数据、Tasks数据和Appointments数据等等。

J2ME PIM概论

根据JSR75的定义,Personal Information Management(PIM)API提供了一种访问移动设备上的本地个人数据的方法,这些数据包括Contacts数据、Tasks数据和Appointments数据等等。在本文中,我们将仔细审视这个API,讨论有关PIM MIDlet的开发、安全和部署问题,并比较PIM和另一个J2MEAPI——RecordManagementStore(RMS)。

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

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

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

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

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

J2ME PIM包

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

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

  Contact——这个接口表示AddressBook上的单个联系人。

  ContactList——这个接口表示AddressBook,这是一个Contact列表。

  Event——这个接口表示单个CalendarEvent。

  EventList——这个接口表示一个Calendar事件列表。

  ToDo——这个接口表示TaskList中的单个Task。

  ToDoList——这个接口表示Task列表。

  这个包定义的主要类是:

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

Contact和ContactList

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

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

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

  清单1.将Contact添加到AddressBook

  1. ContactListaddressBook=null;  
  2. try{  
  3. addressBook=(ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST,  
  4. PIM.READ_WRITE);  
  5. }catch(PIMExceptione){  
  6. //ExitApplication  
  7. }  
  8.  
  9. ContactsingleContact=addressBook.createContact();  
  10. String[]name=newString[addressBook.stringArraySize(Contact.NAME)];  
  11.  
  12. if(addressBook.isSupportedField(Contact.NAME_FORMATTED)  
  13. singleContact.addString(Contact.NAME_FORMATTED,  
  14. PIMItem.ATTR_NONE,"Mrs.JaneDoe");  
  15.  
  16. ThecreateContact()methodcreatesatemporaryemptyContact.Acommit()callmakes  
  17. theContactdatapersistent.Itisadvisabletoclosethelistsbyinvokingtheclose()  
  18. methodafternecessaryoperationshavebeenperformed.  
  19.  
  20. try{  
  21. singleContact.commit();  
  22. }catch(PIMExceptione){  
  23. //Exceptionoccured  
  24. }  
  25. try{  
  26. //Othercleanuptasks  
  27. addressBook.close();  
  28. }catch(PIMExceptione){  
  29.  
  30. }  
  31.  
  32.     
  33.  

Event和EventList

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

  清单2.添加一个Event

  1. EventListeventList=null;  
  2. try{  
  3. eventList=(EventList)PIM.getInstance().openPIMList(PIM.EVENT_LIST,  
  4. PIM.READ_WRITE);  
  5. }catch(PIMExceptione){  
  6. return;  
  7. }  
  8. EventsingleEvent=eventList.createEvent();  
  9. if(eventList.isSupportedField(Event.SUMMARY))  
  10. singleEvent.addString(Event.SUMMARY,PIMItem.ATTR_NONE,"JavaTraining");  
  11. if(eventList.isSupportedField(Event.START))  
  12. singleEvent.addDate(Event.START,PIMItem.ATTR_NONE,aDate.getTime());  
  13. if(eventList.isSupportedField(Event.END))  
  14. singleEvent.addDate(Event.END,PIMItem.ATTR_NONE,aDate.getTime());  
  15.  
  16. try{  
  17. singleEvent.commit();  
  18. }catch(PIMExceptione){  
  19. //Anerroroccured  
  20. }  
  21. try{  
  22. eventList.close();  
  23. }catch(PIMExceptione){  
  24.  
  25. }  
  26.     
  27.  

#p#ToDo和ToDoList

  ToDo接口表示移动设备上的Task数据库中的单个任务,重要的字段是NoteorSummary、Priority、CompletionDate、DueDate和whethercompleted。清单3展示如何向数据库持久化添加一个ToDo。

  清单3.添加一个Task

  1. ToDoListtasks=null;  
  2. try{  
  3. tasks=(ToDoList)PIM.getInstance().openPIMList(PIM.TODO_LIST,  
  4. PIM.READ_WRITE);  
  5. }catch(PIMExceptione){  
  6. //Anerroroccurred  
  7. return;  
  8. }  
  9. ToDosingleTask=tasks.createToDo();  
  10. if(tasks.isSupportedField(Event.SUMMARY))  
  11. singleTask.addString(ToDo.SUMMARY,PIMItem.ATTR_NONE,"ShoppingforHalloween");  
  12. if(tasks.isSupportedField(Event.DUE))  
  13. singleTask.addDate(ToDo.DUE,PIMItem.ATTR_NONE,newDate().getTime());  
  14.  
  15. try{  
  16. singleTask.commit();  
  17. }catch(PIMExceptione){  
  18. //Anerroroccured  
  19. }  
  20. try{  
  21. tasks.close();  
  22. }catch(PIMExceptione){  
  23.  
  24. }  
  25.     
  26.  

PIM与RMS的区别

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

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

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

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

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

  PIM并不局限于本地设备,它可以访问一个附加SIM或另一个远程设备中的数据。RMS只能访问本地设备中的数据。

  PIM可以从vCalendar或vContact等外部源导入或导出,而RMS没有任何Export或Import功能。

  与RMS相比,PIM中的数据解释更加灵活。例如,一个Contact(以标准格式定义)总是可以由另一个J2ME应用程序轻松解释。而RMS中的记录是字节数组,其他J2ME应用程序需要拥有关于如何解释它的信息。#p#

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

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

清单4.addContact()方法

  1. //Import  
  2. importjavax.microedition.lcdui.*;  
  3. importjavax.microedition.midlet.*;  
  4. importjavax.microedition.pim.*;  
  5.  
  6.  
  7. //Textinput  
  8. TextFieldnameField;  
  9. TextFieldphoneField;  
  10.  
  11. …  
  12.  
  13. publicvoidaddContact(){  
  14.  
  15. ContactListcontacts=null;  
  16.  
  17. try{  
  18. contacts=(ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST,  
  19. PIM.READ_WRITE);  
  20. }catch(PIMExceptione){  
  21. //Anerroroccurred  
  22. e.printStackTrace();  
  23. }  
  24.  
  25. Contactcontact=contacts.createContact();  
  26.  
  27. String[]name=newString[contacts.stringArraySize(Contact.NAME)];  
  28.  
  29. if(contacts.isSupportedArrayElement(Contact.NAME,Contact.NAME_GIVEN))  
  30. name[Contact.NAME_GIVEN]=nameField.getString();  
  31.  
  32. if(contacts.isSupportedField(Contact.TEL))  
  33. contact.addString(Contact.TEL,Contact.ATTR_HOME,phoneField.toString());  
  34.  
  35. try{  
  36.  
  37. contact.commit();  
  38.  
  39. }catch(Exceptione){}  
  40.  
  41. }  
  42.  
  43.  

#p#运行时和安全问题

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

PIM MIDlet Runtime API Selection

图1.PIM MIDlet Runtime API Selection

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

PIM MIDlet安全问题

图2.PIM MIDlet安全问题

结束语

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

【编辑推荐】

  1. J2ME可选包—PIM用法详解
  2. J2ME开发环境搭建必备手册
  3. 解析J2ME各大应用平台环境
  4. MotorolaJ2ME开发时需要注意的几个细节
  5. Java2平台J2SE、J2EE、J2ME三大版本的区别

 

 

责任编辑:佚名 来源: ibm.com
相关推荐

2010-09-30 10:25:40

J2ME3D

2010-09-29 13:23:12

J2MEPIM

2010-09-29 08:57:04

J2ME前景

2010-09-29 09:19:39

J2ME开发工具

2010-06-07 13:02:46

Hadoop简介

2010-08-05 14:51:36

AdobeFlex

2010-07-13 10:21:19

2010-09-17 09:19:08

Java API

2009-03-22 09:38:03

Android移植J2ME

2010-09-30 13:28:55

J2ME图形

2010-09-30 09:56:26

J2ME Polish

2009-06-23 11:30:16

RMSJ2ME

2010-07-19 16:56:56

Perl线程

2010-07-26 16:54:15

Perl引用

2010-06-10 18:27:00

UML语言

2010-07-27 08:59:19

FlexBuilder

2010-08-10 10:32:02

Flex语言

2009-06-08 21:34:09

J2EEJ2SEJ2ME

2010-09-29 13:50:31

J2MEJ2SE

2010-07-13 09:02:16

Perl
点赞
收藏

51CTO技术栈公众号