首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

J2ME 個人資訊管理 (PIM) 概覽

     編輯:Java 相關知識

隨著新設備不斷上市,在移動設備上提供通訊錄、行事曆和待辦事項清單成為了一項必然的需求。J2ME 應用程式也需要存取這些資料。可選套件 JSR 75 Personal Information Management (PIM) 提供了這個功能。

它不僅允許存取包含聯絡人、約會和任務的本地個人資訊,還允許存取基於附加到設備上的 SIM 卡和本地及遠端個人資訊資料庫的資訊。

PIM 套件支援從 vCard 和 vCalendar 匯入和匯出資料,vCard 和 vCalendar 分別是通訊錄和行事曆的網際網路標準格式。它還擁有阻止未授權類別檢索個人資訊的安全特性。

另一個可選套件 JSR 75 File Connection 提供一種存取本文探討範圍之外的本地檔案系統的方法。

J2ME PIM 套件

Java PIM 套件透過 javax.microedition.pim 套件表示。

這個套件定義的重要介面包括:

  • Contact — 這個介面表示通訊錄上的單個聯絡人。
  • ContactList — 這個介面表示通訊錄,這是一個 Contact 列表。
  • Event — 這個介面表示單個行事曆事件。
  • EventList — 這個介面表示一個行事曆事件列表。
  • ToDo — 這個介面表示待辦事項清單中的單個任務。
  • ToDoList — 這個介面表示任務列表。

這個套件定義的主要類別是:

  • PIM — PIM 類別定義一些方法,用於建立一個所有現有列表的索引,開啟並編輯那些列表,將其作為來自 vCard 和 vCalendar (Contact 和 Calendar 的網際網路標準) 的匯入或匯出。

Contact 和 ContactList

一個 Contact 表示通訊錄中的單個條目。Contact 中的主要欄位是 Name、Address、Email、Birthday、Photo 和 Telephone。

為了確保跨平台可移植性,建議使用超級介面 PIMList 提供的方法 isSupportedField()。

程式碼片段 1 展示如何向通訊錄新增一個 Contact:

ContactList addressBook = null;
try {
 addressBook = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
} catch (PIMException e) {
 // 結束應用程式
}
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");
// createContact() 方法建立一個暫時的空 Contact。呼叫 commit() 使 Contact 資料持久化。
// 建議在執行必要操作後呼叫 close() 方法關閉列表。
try {
 singleContact.commit();
} catch (PIMException e) {
 // 發生例外
}
try {
 // 其他清理工作
 addressBook.close();
} catch (PIMException e) {
}

Event 和 EventList

一個 Event 表示事件資料庫中的單個條目,比如移動設備上的行事曆。Event 中的關鍵欄位是 Location、Summary、Start date、End Date 和 Alarm notification。程式碼片段 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) {
 // 發生錯誤
}
try {
 eventList.close();
} catch (PIMException e) {
}

ToDo 和 ToDoList

ToDo 介面表示移動設備上的任務資料庫中的單個任務,重要的欄位是 Note or Summary、Priority、Completion Date、Due Date 和 whether completed。程式碼片段 3 展示如何向資料庫持久化新增一個 ToDo。

ToDoList tasks = null;
try {
 tasks = (ToDoList) PIM.getInstance().openPIMList(PIM.TODO_LIST, PIM.READ_WRITE);
} catch (PIMException e) {
 // 發生錯誤
 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) {
 // 發生錯誤
}
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 向 (從) 通訊錄、行事曆和待辦事項清單等已定義的實體儲存 (和檢索) 資料。而另一方面,RMS 向 (從) 一個一般資料庫儲存 (和檢索) 資料。PIM 中的單個實體是一個 Contact、行事曆條目或一個任務,而在 RMS 中,單個實體是一個位元組陣列。
  • PIM 並不局限於本地設備,它可以存取一個附加 SIM 或另一個遠端設備中的資料。RMS 只能存取本地設備中的資料。
  • PIM 可以從 vCalendar 或 vContact 等外部來源匯入或匯出,而 RMS 沒有任何匯出或匯入功能。
  • 與 RMS 相比,PIM 中的資料解釋更加靈活。例如,一個 Contact (以標準格式定義) 總是可以由另一個 J2ME 應用程式輕鬆解釋。而 RMS 中的記錄是位元組陣列,其他 J2ME 應用程式需要知道如何解釋它的資訊。

一個範例 — 新增一個聯絡人

在這個小節中,我們將討論此前提到過的一個方法 addContact(),展示如何向通訊錄新增一個聯絡人。當在表單中提交一個使用者命令時,這個方法 (見程式碼片段 4) 將在一個單獨的執行緒中呼叫。這個方法存取透過 UI Textfields 欄位輸入的資料。

// 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) {
 // 發生錯誤
 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 要執行的移動設備時使用相同的方法。

PIM MIDlet 執行期 API 選擇

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

PIM MIDlet 安全問題

結語

在本文中,我們討論了 J2ME 中的另一個重要功能 Personal Information Management (PIM),該功能允許存取移動設備上形式為 Contact、Task 和 Event 的本地資料。本文還比較了 PIM 和 RMS,後者是處理設備資料的另一個功能。現在,您可以透過 PIM 自帶的匯入和匯出功能同步 J2ME 應用程式和 vCard 以及 vCalendar,後兩者分別是 Contact 和 Calendar 的網際網路標準格式。最後,我們介紹了執行期的安全和部署需求。

本文配套原始碼

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved