J2ME の PIM (Personal Information Management) の概要

モバイル機器上にあるネイティブの個人データにアクセスする機能を提供する

JSR 75 によって定義されている PIM (Personal Information Management) API を利用すると、アドレス帳、タスク・リスト、予定表など、モバイル機器上にあるネイティブの個人データにアクセスすることができます。この記事では、PIM API を詳細に調べ、PIM MIDlet の作成、セキュリティー、デプロイメントに関する考慮事項について説明します。また、もう 1 つの J2ME API である RMS (Record Management Store) と PIM とを比較します。

Soma Ghosh, Technical Architect, US Foodservice

Soma Ghosh はコンピューター科学および工学の専攻で卒業後、広範な E コマース・アプリケーションやインターネット・ベース・アプリケーションの設計と開発を行ってきました。また J2ME に関する数本の記事も執筆しています。彼女はモバイル機器のアプリケーション開発に強い関心を持っています。現在は US Foodservice の IT 部門に所属しています。



2009年 12月 07日

モバイル環境での PIM (Personal Information Management)

さまざまな新しい機器が市場に登場するにつれ、モバイル機器上にあるアドレス帳、予定表、タスク・リストなどを利用できることが不可欠になっています。また J2ME アプリケーションでも、こうしたデータへのアクセスが必要な場合があります。そうした機能を、オプション・パッケージである JSR 75 の PIM (Personal Information Management) パッケージが提供します。

PIM パッケージを利用すると、連絡先や予定表、タスクなどから成るネイティブの個人データにアクセスできるだけではなく、機器に挿入された SIM カードを基に、ローカルおよびリモートの個人情報データベースの情報にもアクセスすることができます。

PIM パッケージは、アドレス帳と予定表用のインターネット標準フォーマットである vCard と vCalendar のデータをエクスポート、インポートする機能を持っています。また PIM パッケージは、無許可のクラスが個人情報を取得することを防止するセキュリティー機能も持っています。

もう 1 つのオプション・パッケージである JSR 75 File Connection を利用すると、ネイティブ・ファイルシステムにアクセスすることができますが、それについてはこの記事では触れません。


J2ME PIM パッケージ

Java PIM パッケージは javax.microedition.pim パッケージによって表現されます。

このパッケージによって定義される重要なインターフェースには以下のものがあります。

  1. Contact – このインターフェースはアドレス帳上の 1 件の連絡先を表します。
  2. ContactList – このインターフェースは連絡先のリストとしてのアドレス帳を表します。
  3. Event – このインターフェースは予定表上の 1 件の予定を表します。
  4. EventList – このインターフェースは予定表の予定のリストを表します。
  5. ToDo – このインターフェースはタスク・リスト上の 1 件のタスクを表します。
  6. ToDoList – このインターフェースはタスクのリストを表します。

このパッケージによって定義される主なクラスは以下のクラスです。

PIM – PIM クラスは、さまざまなメソッドを定義します。定義されるメソッドとしては、既存のすべてのリストの索引を作成するメソッド、それらのリストを開いて編集するメソッド、そしてアドレス帳と予定表のインターネット標準フォーマットである vCard と vCalendar のインポートとエクスポートを行うメソッドがあります。

Contact と ContactList

Contact はアドレス帳の 1 件の連絡先を表します。Contact の主なフィールドは、Name (名前)、Address (住所)、Email (E メール)、Birthday (生年月日)、Photo (写真)、Telephone (電話番号) です。

任意のプラットフォームに移植できるように、Super Interface PIMList に用意されている isSupportedField() メソッドを使うことをお勧めします。

下記のリスト 1 はアドレス帳に Contact を追加する方法を示しています。

リスト 1.アドレス帳に連絡先を追加する
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 と EventList

Event は、Event データベース (例えばモバイル機器の予定表など) の 1 つのエントリーを表します。重要なフィールドは、Location (場所)、Summary (概要)、Start Date (開始日)、End Date (終了日)、Alarm Notification (アラーム通知) です。リスト 2 は Event データベースに Event を追加する方法を示しています。

リスト 2. 予定を追加する
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 データベースの 1 つのタスクを表します。重要なフィールドは、Note (説明) または Summary (概要)、Priority (優先度)、Completion Date (完了日)、Due Date (締切日)、Completed (完了済) です。リスト 3 は ToDo を永続的にデータベースに追加する方法を示しています。

リスト 3. タスクを追加する
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 によるもう 1 つの重要機能である、RMS (Record Management Store) の概念を復習しましょう。J2ME アプリケーションで RMS を利用すると、データを永続的にローカルに保存することができます。RMS のコンポーネントは以下のとおりです。

Record – 各レコードが 1 つ以上のフィールドを持つデータベース・システムとは異なり、RMS の Record はそれぞれが 1 つのデータ・フィールドです。Record には事前定義されたデータ型やサイズはなく、任意のデータを含むことができます。

RecordStore – RecordStore は Record の集合であり、J2ME アプリケーションから名前でアクセスすることができます。

PIM と RMS はどちらも機器上に永続的にデータを保存しますが、両者には以下のような違いがあります。

  1. PIM は、アドレス帳や予定表、タスク・リストなどの定義されたエンティティーとの間でデータの保存と取得を行います。一方 RMS は一般的なデータベースとの間でデータの保存と取得を行います。PIM のエンティティーは、連絡先、予定表に登録された予定、またはタスクですが、RMS ではエンティティーはバイト配列です。
  2. PIM で利用できるのはローカル機器のデータのみに制限されているわけではありません。PIM は挿入された SIM や他のリモート機器のデータも利用することができます。RMS で利用できるのは、ローカル機器とのデータのみです。
  3. PIM は vCalendar や vContact などの外部ソースとの間でエクスポート、インポートを実行することができます。RMS にはエクスポート機能もインポート機能もありません。
  4. PIM でのデータの解釈は RMS での解釈に比較すると柔軟です。例えば、Contact が標準フォーマットで定義されていれば、いつでも別の J2ME アプリケーションで Contact を容易に解釈することができます。RMS でのレコードはバイト配列であり、他の J2ME アプリケーションはその解釈方法についての情報を必要とします。

例 – 連絡先を追加する

このセクションでは、アドレス帳に連絡先を追加するための、addContact() というメソッドについて説明します。このメソッドは Code-4 の場合と同じように、フォーム上でユーザー・コマンドが送信されると、別のスレッドの中で呼び出されます。このメソッドは UI のテキスト・フィールドから入力されたデータを利用します。

リスト 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 ランタイム API を選択する
PIM MIDlet ランタイム API を選択する

MIDlet でアドレス帳、予定表、タスク・リストを読み書きしようとする場合には、追加のアクセス権が必要です。そのためには、「Settings」をクリックし、Wireless toolkit から「Permissions」を選択します。

ContactList、EventList、TodoList には、すべての読み書きアクセス権が用意されています。

図 2. PIM MIDlet のセキュリティーに関する考慮事項
PIM MIDlet のセキュリティーに関する考慮事項

まとめ

この記事では、PIM (Personal Information Management) という、J2ME のもう 1 つの重要機能について説明しました。PIM を利用することで、モバイル機器上にある、連絡先、タスク、予定といった形式のネイティブ・データにアクセスすることができます。またこの記事では、機器に保存されているデータを処理するための別の機能である、RMS との比較を行いました。PIM では、エクスポート機能とインポート機能を初めからサポートしています。このため、それぞれアドレス帳と予定表用のインターネット標準フォーマットである vCard と vCalendar に J2ME アプリケーションを同期させることができます。記事の最後では、実行時におけるセキュリティーとデプロイメントの考慮事項について説明しました。

参考文献

学ぶために

製品や技術を入手するために

議論するために

コメント

developerWorks: サイン・イン

必須フィールドは(*)で示されます。


IBM ID が必要ですか?
IBM IDをお忘れですか?


パスワードをお忘れですか?
パスワードの変更

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


お客様が developerWorks に初めてサインインすると、お客様のプロフィールが作成されます。会社名を非表示とする選択を行わない限り、プロフィール内の情報(名前、国/地域や会社名)は公開され、投稿するコンテンツと一緒に表示されますが、いつでもこれらの情報を更新できます。

送信されたすべての情報は安全です。

ディスプレイ・ネームを選択してください



developerWorks に初めてサインインするとプロフィールが作成されますので、その際にディスプレイ・ネームを選択する必要があります。ディスプレイ・ネームは、お客様が developerWorks に投稿するコンテンツと一緒に表示されます。

ディスプレイ・ネームは、3文字から31文字の範囲で指定し、かつ developerWorks コミュニティーでユニークである必要があります。また、プライバシー上の理由でお客様の電子メール・アドレスは使用しないでください。

必須フィールドは(*)で示されます。

3文字から31文字の範囲で指定し

「送信する」をクリックすることにより、お客様は developerWorks のご使用条件に同意したことになります。 ご使用条件を読む

 


送信されたすべての情報は安全です。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=SOA and web services
ArticleID=461855
ArticleTitle=J2ME の PIM (Personal Information Management) の概要
publish-date=12072009