程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> 術語匯編 J2ME PIM概論

術語匯編 J2ME PIM概論

編輯:J2ME

這裡和大家分享一下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標准)的導入或導出。

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.  
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應用程序需要擁有關於如何解釋它的信息。

一個示例——添加一個聯系人

在這個小節中,我們將討論此前提到過的一個方法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.  
運行時和安全問題

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. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved