溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何理解J2ME PIM的概念

發(fā)布時(shí)間:2021-11-17 17:29:28 來(lái)源:億速云 閱讀:130 作者:柒染 欄目:web開(kāi)發(fā)

這篇文章將為大家詳細(xì)講解有關(guān)如何理解J2ME PIM的概念,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個(gè)參考,希望大家閱讀完這篇文章后對(duì)相關(guān)知識(shí)有一定的了解。

這里和大家分享一下J2ME PIM的概念,根據(jù)JSR75的定義,Personal Information Management(PIM)API提供了一種訪問(wèn)移動(dòng)設(shè)備上的本地個(gè)人數(shù)據(jù)的方法,這些數(shù)據(jù)包括Contacts數(shù)據(jù)、Tasks數(shù)據(jù)和Appointments數(shù)據(jù)等等。

J2ME PIM概論

根據(jù)JSR75的定義,Personal Information Management(PIM)API提供了一種訪問(wèn)移動(dòng)設(shè)備上的本地個(gè)人數(shù)據(jù)的方法,這些數(shù)據(jù)包括Contacts數(shù)據(jù)、Tasks數(shù)據(jù)和Appointments數(shù)據(jù)等等。在本文中,我們將仔細(xì)審視這個(gè)API,討論有關(guān)PIM MIDlet的開(kāi)發(fā)、安全和部署問(wèn)題,并比較PIM和另一個(gè)J2MEAPI——RecordManagementStore(RMS)。

移動(dòng)環(huán)境中的Personal Information Management(PIM)

隨著新設(shè)備不斷上市,在移動(dòng)設(shè)備上提供AddressBook、Calendar和TaskList成為了一項(xiàng)必然的要求。J2ME應(yīng)用程序也需要訪問(wèn)這些數(shù)據(jù)??蛇x包JSR75 Personal Information Management(PIM)提供了這個(gè)功能。

它不僅允許訪問(wèn)包含聯(lián)系人、約會(huì)和任務(wù)的本地個(gè)人信息,還允許訪問(wèn)基于附加到設(shè)備上的SIM卡和Local and Remote Personal Information數(shù)據(jù)庫(kù)的信息。

PIM包支持從vCard和vCalendar導(dǎo)入和導(dǎo)出數(shù)據(jù),vCard和vCalendar分別是AddressBook和Calendar的Internet標(biāo)準(zhǔn)格式。它還擁有阻止未授權(quán)類(lèi)檢索個(gè)人信息的安全特性。

另一個(gè)可選包JSR75 File Connection提供一種訪問(wèn)本文探討范圍之外的本地文件系統(tǒng)的方法。

J2ME PIM包

Java PIM包通過(guò)javax.microedition.pim包表示。

這個(gè)包定義的重要接口包括:

Contact——這個(gè)接口表示AddressBook上的單個(gè)聯(lián)系人。

ContactList——這個(gè)接口表示AddressBook,這是一個(gè)Contact列表。

Event——這個(gè)接口表示單個(gè)CalendarEvent。

EventList——這個(gè)接口表示一個(gè)Calendar事件列表。

ToDo——這個(gè)接口表示TaskList中的單個(gè)Task。

ToDoList——這個(gè)接口表示Task列表。

這個(gè)包定義的主要類(lèi)是:

PIM——PIM類(lèi)定義一些方法,用于創(chuàng)建一個(gè)所有現(xiàn)有列表的索引,打開(kāi)并編輯那些列表,將其作為來(lái)自vCard和vCalendar(Contact和Calendar的Internet標(biāo)準(zhǔn))的導(dǎo)入或?qū)С觥?/p>

Contact和ContactList

一個(gè)Contact表示AddressBook中的單個(gè)條目。Contact中的主要字段是Name、Address、Email、Birthday、Photo和Telephone。

為了確保跨平臺(tái)可移植性,建議使用SuperInterfacePIMList提供的方法isSupportedField()。

清單1展示如何向AddressBook添加一個(gè)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

一個(gè)Event表示Event數(shù)據(jù)庫(kù)中的單個(gè)條目,比如,移動(dòng)設(shè)備上的日歷。Event中的關(guān)鍵字段是Location、Summary、Startdate、EndDate和Alarmnotification。清單2展示如何向Event數(shù)據(jù)庫(kù)添加一個(gè)Event。

清單2.添加一個(gè)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){   }

ToDo和ToDoList

ToDo接口表示移動(dòng)設(shè)備上的Task數(shù)據(jù)庫(kù)中的單個(gè)任務(wù),重要的字段是NoteorSummary、Priority、CompletionDate、DueDate和whethercompleted。清單3展示如何向數(shù)據(jù)庫(kù)持久化添加一個(gè)ToDo。

清單3.添加一個(gè)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提供的另一個(gè)關(guān)鍵功能,RecordManagementStore(RMS)概念。RMS允許J2ME應(yīng)用程序持久地本地存儲(chǔ)數(shù)據(jù)。RMS包含以下組件:

Records——與每條記錄擁有一個(gè)或多個(gè)字段的數(shù)據(jù)庫(kù)系統(tǒng)不同,RMS中的一條Record是一個(gè)單獨(dú)的數(shù)據(jù)字段。它沒(méi)有一個(gè)預(yù)先定義的數(shù)據(jù)類(lèi)型或大小,可以包含任意數(shù)據(jù)。

RecordStore——RecordStore是一個(gè)Records集合,可以通過(guò)J2ME應(yīng)用程序根據(jù)名稱訪問(wèn)。

以下是PIM和RMS的區(qū)別,盡管二者都負(fù)責(zé)在設(shè)備上存儲(chǔ)持久數(shù)據(jù)。

PIM向(從)AddressBook、Calendar和TaskList等已定義的實(shí)體存儲(chǔ)(和檢索)數(shù)據(jù)。而另一方面,RMS向(從)一個(gè)常規(guī)數(shù)據(jù)庫(kù)存儲(chǔ)(和檢索)數(shù)據(jù)。PIM中的單個(gè)實(shí)體是一個(gè)Contact、Calendar條目或一個(gè)Task,而在RMS中,單個(gè)實(shí)體是一個(gè)字節(jié)數(shù)組。

PIM并不局限于本地設(shè)備,它可以訪問(wèn)一個(gè)附加SIM或另一個(gè)遠(yuǎn)程設(shè)備中的數(shù)據(jù)。RMS只能訪問(wèn)本地設(shè)備中的數(shù)據(jù)。

PIM可以從vCalendar或vContact等外部源導(dǎo)入或?qū)С?,而RMS沒(méi)有任何Export或Import功能。

與RMS相比,PIM中的數(shù)據(jù)解釋更加靈活。例如,一個(gè)Contact(以標(biāo)準(zhǔn)格式定義)總是可以由另一個(gè)J2ME應(yīng)用程序輕松解釋。而RMS中的記錄是字節(jié)數(shù)組,其他J2ME應(yīng)用程序需要擁有關(guān)于如何解釋它的信息。

一個(gè)示例——添加一個(gè)聯(lián)系人

在這個(gè)小節(jié)中,我們將討論此前提到過(guò)的一個(gè)方法addContact(),展示如何向AddressBook添加一個(gè)聯(lián)系人。當(dāng)在表單中提交一個(gè)用戶命令時(shí),這個(gè)方法(見(jiàn)清單4)將在一個(gè)單獨(dú)的線程中調(diào)用。這個(gè)方法訪問(wèn)通過(guò)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){}   }

運(yùn)行時(shí)和安全問(wèn)題

PIM MIDlet應(yīng)該在一個(gè)支持PIM的配置(即JSR75)中運(yùn)行。我們通過(guò)在Sun的WirelessToolkit2.5上先單擊Settings然后單擊APISelection來(lái)選擇以下設(shè)置。選擇PIM MIDlet要運(yùn)行的移動(dòng)設(shè)備時(shí)使用相同的方法。

如何理解J2ME PIM的概念

圖1.PIM MIDlet Runtime API Selection

MIDlet需要其他權(quán)限才能讀寫(xiě)Contacts、Calendar或TaskLists,可以通過(guò)在WirelessToolkit中單擊Settings并選擇Permissions來(lái)設(shè)置相關(guān)權(quán)限。這里提供了用于ContactList、EventList和TodoList的所有Read和Write權(quán)限。

如何理解J2ME PIM的概念

圖2.PIM MIDlet安全問(wèn)題

我們討論了J2ME中的另一個(gè)重要功能Personal Information Management(PIM),該功能允許訪問(wèn)移動(dòng)設(shè)備上形式為Contact、Task和Event的本地?cái)?shù)據(jù)。本文還比較了PIM和RMS,后者是處理設(shè)備數(shù)據(jù)的另一個(gè)功能?,F(xiàn)在,您可以通過(guò)PIM自帶的導(dǎo)入和導(dǎo)出功能同步J2ME應(yīng)用程序和vCard以及vCalendar,后兩者分別是Contact和Calendar的Internet標(biāo)準(zhǔn)格式。

關(guān)于如何理解J2ME PIM的概念就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI