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

J2ME PIM API 深度解析:從核心介面到實戰部署的完整技術圖譜

     編輯:J2ME

PIM 概論:JSR 75 定義的行動個人資訊標準

PIM (Personal Information Management) API 提供統一介面存取裝置本地個人資料:通訊錄、行程、待辦。支援 SIM 卡與遠端資料庫資料,內建 vCard/vCalendar 匯入匯出(Internet 標準格式),具備安全特性防止未授權存取。配套 JSR 75 另一可選包 File Connection 提供檔案系統存取。

核心包結構:javax.microedition.pim

關鍵介面

介面語義
Contact單一聯繫人
ContactList通訊錄(Contact 集合)
Event單一行程
EventList行程列表
ToDo單一待辦
ToDoList待辦列表

核心類

PIM:工廠類,提供 getInstance()、openPIMList()、import/export (vCard/vCalendar)、列表索引等方法。

Contact 與 ContactList 實戰

新增聯繫人標準流程


ContactList addressBook = null;
try {
    addressBook = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
    Contact singleContact = addressBook.createContact();
    
    // 姓名:優先使用格式化姓名欄位
    if (addressBook.isSupportedField(Contact.NAME_FORMATTED))
        singleContact.addString(Contact.NAME_FORMATTED, PIMItem.ATTR_NONE, "Mrs. Jane Doe");
    // 或拆解姓名結構
    else if (addressBook.isSupportedArrayElement(Contact.NAME, Contact.NAME_GIVEN)) {
        String[] name = new String[addressBook.stringArraySize(Contact.NAME)];
        name[Contact.NAME_GIVEN] = "Jane";
        name[Contact.NAME_FAMILY] = "Doe";
        singleContact.addStringArray(Contact.NAME, PIMItem.ATTR_NONE, name);
    }
    
    singleContact.commit();  // 持久化
} catch (PIMException e) { /* 錯誤處理 */ }
finally {
    try { if (addressBook != null) addressBook.close(); } catch (PIMException ignore) {}
}

關鍵點:createContact() 建立暫時物件,commit() 才真正寫入;操作完成必須 close() 釋放鎖定。

Event 與 EventList 實戰


EventList eventList = (EventList) PIM.getInstance().openPIMList(PIM.EVENT_LIST, PIM.READ_WRITE);
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, startDate.getTime());
if (eventList.isSupportedField(Event.END)) singleEvent.addDate(Event.END, PIMItem.ATTR_NONE, endDate.getTime());
singleEvent.commit();
eventList.close();

ToDo 與 ToDoList 實戰


ToDoList tasks = (ToDoList) PIM.getInstance().openPIMList(PIM.TODO_LIST, PIM.READ_WRITE);
ToDo singleTask = tasks.createToDo();
if (tasks.isSupportedField(ToDo.SUMMARY)) singleTask.addString(ToDo.SUMMARY, PIMItem.ATTR_NONE, "Shopping for Halloween");
if (tasks.isSupportedField(ToDo.DUE)) singleTask.addDate(ToDo.DUE, PIMItem.ATTR_NONE, new Date().getTime());
singleTask.commit();
tasks.close();

PIM vs RMS:架構層面的根本差異

特性PIMRMS
實體模型Contact/Event/ToDo(語義豐富)Record = byte[](無語義)
跨裝置存取本機、SIM、遠端資料庫僅本機
標準互通vCard/vCalendar 匯入匯出無標準
資料解釋標準欄位,跨應用自解析需協議文檔
查詢效率欄位索引檢索全表掃描

完整範例:UI 表單新增聯繫人 (addContact())


public void addContact() {
    ContactList contacts = null;
    try {
        contacts = (ContactList) PIM.getInstance().openPIMList(PIM.CONTACT_LIST, PIM.READ_WRITE);
        Contact contact = contacts.createContact();
        
        // 從 UI TextField 取值
        if (contacts.isSupportedArrayElement(Contact.NAME, Contact.NAME_GIVEN)) {
            String[] name = new String[contacts.stringArraySize(Contact.NAME)];
            name[Contact.NAME_GIVEN] = nameField.getString();
            contact.addStringArray(Contact.NAME, PIMItem.ATTR_NONE, name);
        }
        if (contacts.isSupportedField(Contact.TEL))
            contact.addString(Contact.TEL, Contact.ATTR_HOME, phoneField.getString());
        
        contact.commit();
    } catch (PIMException e) { e.printStackTrace(); }
    finally {
        try { if (contacts != null) contacts.close(); } catch (PIMException ignore) {}
    }
}

運行時與部署配置

WTK 2.5 模擬器 API 選擇

Settings → API Selection → 勾選 JSR 75: PIM API。真機選擇同理:必須為支援 JSR 75 的裝置。

權限配置

Settings → Permissions → 為 ContactList/EventList/ToDoList 分別授予 Read/Write** 權限(或按需最小權限)。真機部署需簽名並配置對應權限描述符。

結語

PIM 以標準化語義模型、vCard/vCalendar 互通、欄位級防護 API、權限模型四大支柱,解決了 J2ME 存取裝置原生個人資料的長期難題。掌握其核心介面與標準流程,並嚴格遵循「檢測→開啟→防護操作→提交→關閉」生命週期,即可構建安全、可移植、深度整合原生體驗的行動應用。

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