術(shù)語匯編 J2ME PIM概論
這里和大家分享一下J2ME PIM的概念,根據(jù)JSR75的定義,Personal Information Management(PIM)API提供了一種訪問移動設(shè)備上的本地個人數(shù)據(jù)的方法,這些數(shù)據(jù)包括Contacts數(shù)據(jù)、Tasks數(shù)據(jù)和Appointments數(shù)據(jù)等等。
J2ME PIM概論
根據(jù)JSR75的定義,Personal Information Management(PIM)API提供了一種訪問移動設(shè)備上的本地個人數(shù)據(jù)的方法,這些數(shù)據(jù)包括Contacts數(shù)據(jù)、Tasks數(shù)據(jù)和Appointments數(shù)據(jù)等等。在本文中,我們將仔細(xì)審視這個API,討論有關(guān)PIM MIDlet的開發(fā)、安全和部署問題,并比較PIM和另一個J2MEAPI——RecordManagementStore(RMS)。
移動環(huán)境中的Personal Information Management(PIM)
隨著新設(shè)備不斷上市,在移動設(shè)備上提供AddressBook、Calendar和TaskList成為了一項必然的要求。J2ME應(yīng)用程序也需要訪問這些數(shù)據(jù)??蛇x包JSR75 Personal Information Management(PIM)提供了這個功能。
它不僅允許訪問包含聯(lián)系人、約會和任務(wù)的本地個人信息,還允許訪問基于附加到設(shè)備上的SIM卡和Local and Remote Personal Information數(shù)據(jù)庫的信息。
PIM包支持從vCard和vCalendar導(dǎo)入和導(dǎo)出數(shù)據(jù),vCard和vCalendar分別是AddressBook和Calendar的Internet標(biāo)準(zhǔn)格式。它還擁有阻止未授權(quán)類檢索個人信息的安全特性。
另一個可選包JSR75 File Connection提供一種訪問本文探討范圍之外的本地文件系統(tǒng)的方法。
J2ME PIM包
Java PIM包通過javax.microedition.pim包表示。
這個包定義的重要接口包括:
Contact——這個接口表示AddressBook上的單個聯(lián)系人。
ContactList——這個接口表示AddressBook,這是一個Contact列表。
Event——這個接口表示單個CalendarEvent。
EventList——這個接口表示一個Calendar事件列表。
ToDo——這個接口表示TaskList中的單個Task。
ToDoList——這個接口表示Task列表。
這個包定義的主要類是:
PIM——PIM類定義一些方法,用于創(chuàng)建一個所有現(xiàn)有列表的索引,打開并編輯那些列表,將其作為來自vCard和vCalendar(Contact和Calendar的Internet標(biāo)準(zhǔn))的導(dǎo)入或?qū)С觥?p#
Contact和ContactList
一個Contact表示AddressBook中的單個條目。Contact中的主要字段是Name、Address、Email、Birthday、Photo和Telephone。
為了確??缙脚_可移植性,建議使用SuperInterfacePIMList提供的方法isSupportedField()。
清單1展示如何向AddressBook添加一個Contact:
清單1.將Contact添加到AddressBook
- ContactListaddressBook=null;
- try{
- addressBook=(ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST,
- PIM.READ_WRITE);
- }catch(PIMExceptione){
- //ExitApplication
- }
- ContactsingleContact=addressBook.createContact();
- String[]name=newString[addressBook.stringArraySize(Contact.NAME)];
- if(addressBook.isSupportedField(Contact.NAME_FORMATTED)
- singleContact.addString(Contact.NAME_FORMATTED,
- PIMItem.ATTR_NONE,"Mrs.JaneDoe");
- ThecreateContact()methodcreatesatemporaryemptyContact.Acommit()callmakes
- theContactdatapersistent.Itisadvisabletoclosethelistsbyinvokingtheclose()
- methodafternecessaryoperationshavebeenperformed.
- try{
- singleContact.commit();
- }catch(PIMExceptione){
- //Exceptionoccured
- }
- try{
- //Othercleanuptasks
- addressBook.close();
- }catch(PIMExceptione){
- }
Event和EventList
一個Event表示Event數(shù)據(jù)庫中的單個條目,比如,移動設(shè)備上的日歷。Event中的關(guān)鍵字段是Location、Summary、Startdate、EndDate和Alarmnotification。清單2展示如何向Event數(shù)據(jù)庫添加一個Event。
清單2.添加一個Event
- EventListeventList=null;
- try{
- eventList=(EventList)PIM.getInstance().openPIMList(PIM.EVENT_LIST,
- PIM.READ_WRITE);
- }catch(PIMExceptione){
- return;
- }
- EventsingleEvent=eventList.createEvent();
- if(eventList.isSupportedField(Event.SUMMARY))
- singleEvent.addString(Event.SUMMARY,PIMItem.ATTR_NONE,"JavaTraining");
- 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(PIMExceptione){
- //Anerroroccured
- }
- try{
- eventList.close();
- }catch(PIMExceptione){
- }
#p#ToDo和ToDoList
ToDo接口表示移動設(shè)備上的Task數(shù)據(jù)庫中的單個任務(wù),重要的字段是NoteorSummary、Priority、CompletionDate、DueDate和whethercompleted。清單3展示如何向數(shù)據(jù)庫持久化添加一個ToDo。
清單3.添加一個Task
- ToDoListtasks=null;
- try{
- tasks=(ToDoList)PIM.getInstance().openPIMList(PIM.TODO_LIST,
- PIM.READ_WRITE);
- }catch(PIMExceptione){
- //Anerroroccurred
- return;
- }
- ToDosingleTask=tasks.createToDo();
- if(tasks.isSupportedField(Event.SUMMARY))
- singleTask.addString(ToDo.SUMMARY,PIMItem.ATTR_NONE,"ShoppingforHalloween");
- if(tasks.isSupportedField(Event.DUE))
- singleTask.addDate(ToDo.DUE,PIMItem.ATTR_NONE,newDate().getTime());
- try{
- singleTask.commit();
- }catch(PIMExceptione){
- //Anerroroccured
- }
- try{
- tasks.close();
- }catch(PIMExceptione){
- }
PIM與RMS的區(qū)別
在繼續(xù)討論之前,我們先回顧一下J2ME提供的另一個關(guān)鍵功能,RecordManagementStore(RMS)概念。RMS允許J2ME應(yīng)用程序持久地本地存儲數(shù)據(jù)。RMS包含以下組件:
Records——與每條記錄擁有一個或多個字段的數(shù)據(jù)庫系統(tǒng)不同,RMS中的一條Record是一個單獨的數(shù)據(jù)字段。它沒有一個預(yù)先定義的數(shù)據(jù)類型或大小,可以包含任意數(shù)據(jù)。
RecordStore——RecordStore是一個Records集合,可以通過J2ME應(yīng)用程序根據(jù)名稱訪問。
以下是PIM和RMS的區(qū)別,盡管二者都負(fù)責(zé)在設(shè)備上存儲持久數(shù)據(jù)。
PIM向(從)AddressBook、Calendar和TaskList等已定義的實體存儲(和檢索)數(shù)據(jù)。而另一方面,RMS向(從)一個常規(guī)數(shù)據(jù)庫存儲(和檢索)數(shù)據(jù)。PIM中的單個實體是一個Contact、Calendar條目或一個Task,而在RMS中,單個實體是一個字節(jié)數(shù)組。
PIM并不局限于本地設(shè)備,它可以訪問一個附加SIM或另一個遠(yuǎn)程設(shè)備中的數(shù)據(jù)。RMS只能訪問本地設(shè)備中的數(shù)據(jù)。
PIM可以從vCalendar或vContact等外部源導(dǎo)入或?qū)С?,而RMS沒有任何Export或Import功能。
與RMS相比,PIM中的數(shù)據(jù)解釋更加靈活。例如,一個Contact(以標(biāo)準(zhǔn)格式定義)總是可以由另一個J2ME應(yīng)用程序輕松解釋。而RMS中的記錄是字節(jié)數(shù)組,其他J2ME應(yīng)用程序需要擁有關(guān)于如何解釋它的信息。#p#
一個示例——添加一個聯(lián)系人
在這個小節(jié)中,我們將討論此前提到過的一個方法addContact(),展示如何向AddressBook添加一個聯(lián)系人。當(dāng)在表單中提交一個用戶命令時,這個方法(見清單4)將在一個單獨的線程中調(diào)用。這個方法訪問通過UITextfields字段輸入的數(shù)據(jù)。
清單4.addContact()方法
- //Import
- importjavax.microedition.lcdui.*;
- importjavax.microedition.midlet.*;
- importjavax.microedition.pim.*;
- //Textinput
- TextFieldnameField;
- TextFieldphoneField;
- …
- publicvoidaddContact(){
- ContactListcontacts=null;
- try{
- contacts=(ContactList)PIM.getInstance().openPIMList(PIM.CONTACT_LIST,
- PIM.READ_WRITE);
- }catch(PIMExceptione){
- //Anerroroccurred
- e.printStackTrace();
- }
- Contactcontact=contacts.createContact();
- String[]name=newString[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(Exceptione){}
- }
#p#運行時和安全問題
PIM MIDlet應(yīng)該在一個支持PIM的配置(即JSR75)中運行。我們通過在Sun的WirelessToolkit2.5上先單擊Settings然后單擊APISelection來選擇以下設(shè)置。選擇PIM MIDlet要運行的移動設(shè)備時使用相同的方法。
圖1.PIM MIDlet Runtime API Selection
MIDlet需要其他權(quán)限才能讀寫Contacts、Calendar或TaskLists,可以通過在WirelessToolkit中單擊Settings并選擇Permissions來設(shè)置相關(guān)權(quán)限。這里提供了用于ContactList、EventList和TodoList的所有Read和Write權(quán)限。
圖2.PIM MIDlet安全問題
結(jié)束語
在本文中,我們討論了J2ME中的另一個重要功能Personal Information Management(PIM),該功能允許訪問移動設(shè)備上形式為Contact、Task和Event的本地數(shù)據(jù)。本文還比較了PIM和RMS,后者是處理設(shè)備數(shù)據(jù)的另一個功能?,F(xiàn)在,您可以通過PIM自帶的導(dǎo)入和導(dǎo)出功能同步J2ME應(yīng)用程序和vCard以及vCalendar,后兩者分別是Contact和Calendar的Internet標(biāo)準(zhǔn)格式。***,我們介紹了運行時的安全和部署要求。
【編輯推薦】
- J2ME可選包—PIM用法詳解
- J2ME開發(fā)環(huán)境搭建必備手冊
- 解析J2ME各大應(yīng)用平臺環(huán)境
- MotorolaJ2ME開發(fā)時需要注意的幾個細(xì)節(jié)
- Java2平臺J2SE、J2EE、J2ME三大版本的區(qū)別