PIM (Personal Information Management) 針對使用者核心資料:通訊錄、行程、待辦事項。定義於 JSR 75,屬可選包,不提供完整運行環境,需裝置支援並對 MIDP 進行擴展。移植性受限,使用前必須檢測可用性。
String v = System.getProperty("microedition.pim.version");
if (v != null) {
// PIM 可用
} else {
// PIM 不可用
}
⚠️ 無法透過 Class.forName("javax.microedition.pim.PIM") 檢測,因實現類由裝置廠商提供,編譯期不可見。
| 類型 | List 介面 | Item 介面 | 常用欄位範例 |
|---|---|---|---|
| 通訊錄 | ContactList | Contact | NAME、TEL、EMAIL、ADDR、BIRTHDAY、PHOTO |
| 行程 | EventList | Event | SUMMARY、LOCATION、START、END、ALARM |
| 待辦 | ToDoList | ToDo | SUMMARY、PRIORITY、DUE、COMPLETION、COMPLETE |
裝置至少支援一種,不保證三種皆有。所有 API 在 javax.microedition.pim 包下。
PIM pim = PIM.getInstance(); 取得單例pim.openPIMList(type, mode) 開啟列表(READ_ONLY/READ_WRITE)items() 取得 Enumeration 遍歷,或 createContact()/createEvent()/createToDo() 建立新項目getString()/getDate()/addString()/addDate(),必先用 isSupportedField() 檢測欄位可用性commit() 持久化,close() 釋放資源
ContactList cl = null;
try {
cl = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
Contact c = cl.createContact();
if (cl.isSupportedField(Contact.NAME_FORMATTED))
c.addString(Contact.NAME_FORMATTED, PIMItem.ATTR_NONE, "Jane Doe");
if (cl.isSupportedField(Contact.TEL))
c.addString(Contact.TEL, Contact.ATTR_MOBILE, "0912345678");
c.commit();
} catch (PIMException | SecurityException e) {
// 處理異常:無權限、裝置不支援等
} finally {
if (cl != null) try { cl.close(); } catch (PIMException ignore) {}
}
EventList el = (EventList) PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);
Event e = el.createEvent();
if (el.isSupportedField(Event.SUMMARY)) e.addString(Event.SUMMARY, PIMItem.ATTR_NONE, "Java Training");
if (el.isSupportedField(Event.START)) e.addDate(Event.START, PIMItem.ATTR_NONE, startTime);
if (el.isSupportedField(Event.END)) e.addDate(Event.END, PIMItem.ATTR_NONE, endTime);
e.commit();
el.close();
ToDoList tl = (ToDoList) PIM.getInstance().openPIMList(PIM.TODO_LIST, PIM.READ_WRITE);
ToDo t = tl.createToDo();
if (tl.isSupportedField(ToDo.SUMMARY)) t.addString(ToDo.SUMMARY, PIMItem.ATTR_NONE, "Buy Halloween Candy");
if (tl.isSupportedField(ToDo.DUE)) t.addDate(ToDo.DUE, PIMItem.ATTR_NONE, System.currentTimeMillis());
t.commit();
tl.close();
openPIMList 會拋出 SecurityExceptionjavax.microedition.pim.ContactList.read/write 等| 維度 | PIM | RMS |
|---|---|---|
| 資料語義 | 結構化實體 | 位元組陣列 |
| 跨應用共享 | 標準格式易解析 | 需協議約定 |
| 資料來源 | 本機、SIM、遠端資料庫 | 僅本機 |
| 匯入/匯出 | 支援 vCard/vCalendar | 無內建 |
| 查詢能力 | 欄位級檢索 | 全掃描 |