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

J2ME Personal Information Management (PIM) 概覽

編輯:關於JAVA

移動環境中的 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

MIDlet 需要其他權限才能讀寫 Contacts、Calendar 或 Task Lists,可以通過在 Wireless Toolkit 中單擊 Settings 並選擇 Permissions 來設置相關權限。這裡提供了用於 ContactList、EventList 和 TodoList 的所有 Read 和 Write 權限。

圖 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