|
Unofficial "CLDC 1.1 + MIDP 2.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object javax.microedition.io.PushRegistry
public class PushRegistry
このクラスはインバウンド接続(外部から内部へ向かう接続)のリストを維持管理します。
アプリケーションは、registerConnection
メソッドを呼び出すか、アプリケーション・ディスクリプタ・ファイル(JAD ファイル)の項目によってインバウンド接続を登録することができます。
アプリケーションが稼働中は、インバウンド接続に関連するすべての入出力操作にアプリケーションが責任を負います。
アプリケーションが稼動していないときは、アプリケーション管理ソフトウェア(AMS : Application Management Software)がインバウンド通知要求を受け取ろうとします。
登録された MIDlet に通知が到着すると、AMS は通常の方法で MIDlet.startApp
メソッドを呼び出して、MIDlet を開始します。
インバウンドの Generic Connection による衝突を避けるために、アプリケーション・ディスクリプタ・ファイルは MIDlet スイートによって必要とされる静的な接続に関する情報を含める必要があります。 アプリケーション・ディスクリプタに存在する、すべての静的な Push 宣言を実現することができないことがインストール時に判明した場合には、コンフリクトが発生していることをユーザーに通知しなければなりません。そして、その MIDlet スイートをインストールしてはなりません (Over The Air User Initiated Provisioning Specification の errors reported in the event of conflicts(コンフリクトの発生に関するエラー報告)セクションを参照してください)。
宣言が実現不可能な状態は以下の場合です:
MIDlet-<n>
属性に記載されていない MIDlet
クラスの場合
Push 登録条件を満たすことができない場合でも、MIDlet スイートが意味のある機能を発揮することができるならば、PushRegistry
のダイナミックな登録方法を用いて Push 接続を登録しなければなりません。
コンフリクトの発生しないインストールでは、スイート内のそれぞれの MIDlet が使用する専用の接続のために、要求された接続を予約します。
インストールされたスイートが存在している間、他のアプリケーションによる予約された接続に対する全ての試みは IOException
を throw して失敗します。
スイートに含まれる MIDlet による、予約した接続に対する Connector.open()
メソッドによる呼び出しは、スイートがすでに接続を開いている場合を除いて常に成功します。
2つの MIDlet スイートが共通の静的な Push 接続を持つ場合、それらは一緒にインストールしても、ともに正しく機能することができません。 一般にエンド・ユーザーは、もう片方のインストールを成功させるために、コンフリクトするアプリケーションをアンインストールしなければならないでしょう。
それぞれの Push 登録項目は以下の情報を含みます。
MIDlet-Push-<n>: <接続 URL>, <MIDlet クラス名>, <許可する送信元>
意味は以下の通りです。
MIDlet-Push-<n>
= Push 登録属性名です。
複数の Push 登録を MIDlet スイートに提供することができます。
<n>
に使用することができる数値は 1
から開始する連続した序数値を使用しなければなりません。
最初に欠番となる序数値でリストは終了します。
それ以後の全ての追加項目を無視します。
<接続 URL>
= Connector.open()
で使用する接続文字列です。
<MIDlet クラス名>
= 接続に対して責任を負う MIDlet クラス名です。
ディスクリプタ・ファイルあるいは JAR ファイルに含まれるマニフェストにおいて命名されている MIDlet を登録しなければなりません(Push 接続が検出された時、アプリケーションに関してユーザーにメッセージを表示する時にこの情報が必要であり、ユーザーは必要に応じてアプリケーションに対して許可を与えるかまたは取り消すかを決定します)。
命名された MIDlet がスイートで複数存在するなら、最初に一致する項目を使用します。
<許可する送信元>
= 要求された制限を必要とする MIDlet の起動を許可する、有効な送信元を表すフィルタです。
許可する送信元
フィールドの構文とセマンティクスは使用するアドレス形式に依存します。
なお、このフィールドに対するあらゆる構文がワイルドカード・キャラクタ"*"
と"?"
をサポートしなければなりません。
これらのワイルドカードの意味は以下の通りです。
"*"
はいずれかの文字列(空白を含む)を意味します。
"?"
はいずれかの文字を意味します。
"*"
のみである場合、全ての発生ソースからの接続を受け入れます。
(もしプラットフォームがサポートするならば)Push 属性で使用するデータグラムおよびソケットの URL のために、このフィールドは IPv4 および IPv6 による数値の IP アドレスをそれぞれの URL に使用することができます。
これらの IP アドレスにもワイルドカードを使用することができます。例えば"129.70.40.*"
という表記によるサブネットの解決を許可します。
ポート番号はデータグラムとソケット接続のためのフィルタの一部にはならないことに注意が必要です。
MIDP 2.0 仕様はデータグラムおよびソケットによるインバウンド接続のための構文を定義します。 他の仕様が追加の接続タイプのために Push セマンティクスを定義する際には、接続 URL 文字列のために想定される形式と同様に、想定される構文をフィルタ・フィールドとして定義する必要があります。
以下にストリーム・ソケットのポート番号 79 とデータグラム接続のポート 50000 を予約するサンプルのディスクリプタ・ファイル用の項目を示します(ポート番号は、IANA によって維持管理されており、よく知られている/Well-Known ポート番号、ユーザー定義ポート番号およびダイナミック・ポート番号をカバーしています→参照: IANA Port Number Registry)。
MIDlet-Push-1: socket://:79, com.sun.example.SampleChat, * MIDlet-Push-2: datagram://:50000, com.sun.example.SampleChat, *
メッセージのバッファリングのための要件は、Push に使用する各プロトコルに依存し、各プロトコルごとに個別に定義されます。
全てのプロトコルに適用される、バッファリングに関連するどのような一般的な要件もありません。
実装がメッセージをバッファリングする場合、MIDlet を開始して、Push のために登録された関連する Connection
をオープンした MIDlet に、これらのメッセージを提供しなければなりません。
データグラム接続が Push と共にサポートされる場合、実装はデータグラム Push のために登録された MIDlet が受け取ったデータグラムに対応して開始する際、MIDlet が開始してから UDPDatagramConnection
をオープンすることによって、少なくとも MIDlet を開始させた要因となるデータグラムを実装はバッファリングし、MIDlet が利用可能であることを保証しなければなりません。
ソケット接続が Push と共にサポートされる場合、実装はソケット Push のために登録された MIDlet が接続要求によるソケット接続に対応して開始する際、MIDlet が開始してから ServerSocketConnection
をオープンすることによって、この接続を受け取ることができることを保証しなければなりません(タイムアウトの場合を除く)。
Connection
vs Push 登録サポート全ての Push アプリケーションのデータ転送にとって、全てのケースにおいて Generic Connection の使用が適切であるというわけにはいかないでしょう。
プロトコルがインバウンドの接続方式としてデバイスでサポートされていたとしても、それを有効な Push メカニズムとして使用できることを要求するものではありません。
例えば、プラットフォームは MIDlet でサーバー・ソケット接続をサポートするものの Push 受け付けのためにはソケット接続をサポートしないかもしれません。
プラットフォームはこのオプション機能をサポートしない場合には、registerConnection
メソッドおよび registerAlarm
メソッドの呼び出し時に ConnectionNotFoundException
を throw します。
登録された Push 接続への責任は AMS(Application Management Software : アプリケーション管理ソフトウェア)とインバウンドの接続の際に入出力操作を行う MIDlet の間で共有されます。
どのような場合にもデータの喪失を防ぐために、アプリケーションは全ての接続に対する入出力を Connector.open()
メソッドの呼び出しから Connection.close()
メソッドの呼び出しの間に行います。
AMS はインバウンド接続の通知を受け取ろうとします。 これは新しいインバウンド・データを探すためにネイティブ・ソフトウェアのコールバックまたはポーリング・メカニズムで扱うかもしれません。 AMS は MIDlet スイートを呼び出す前に、PushRegistry のセキュリティの実施し、(必要に応じて)ユーザーに通知を提示する責任があります。
AMS は(必要であれば)Push MIDlet メソッドの呼び出しの前に、全ての実行中のアプリケーションをシャットダウンする責任があります。
AMS が Push アプリケーションを開始した後に、MIDlet は接続を開いた後の全ての入出力サブシーケンスに責任があります。 ブロッキングを伴う入出力操作を行うアプリケーションはインタラクティブなユーザー操作を考慮して別々のスレッドを使用すべきです。 一度アプリケーションが開始し、接続がオープンされると AMS はもうその接続のために Push 通知を受け取ることに責任はありません。 アプリケーションは全てのインバウンド・データを読む責任があります。
アプリケーションが全てのインバウンド・データの処理を終えたなら、close()
メソッドを呼び出して接続を閉じます。
接続が閉じられると、AMS もアプリケーションの Push 通知を受け取りません。
全てのデータを受け取る前にアプリケーションが接続を閉じるなら、インバウンド・データは失われます。
アプリケーションが破棄されると、AMS はインバウンド接続を受け取るための責任を持ちます。
Push メカニズムで非同期なデータを取り扱う際、Push アプリケーションは予測可能な振舞いをすべきです。 正しい振る舞いのアプリケーションはデータを処理してあることをユーザーに通知すべきです(ユーザーの目に見えるどのようなインタフェースも使用しないアプリケーションを記述した場合、バックグラウンド機能を実行するだけであり、アプリケーションを実行することでエンド・ユーザーに混乱を経験させるかもしれません)。
IANA に登録されたよく知られている/Well-Known ポートの定義を使用する必要が無い場合があります。 簡単なアプリケーションは、MIDlet とサーバー・アプリケーションの間で取り決めた独自プロトコルでデータの交換を望むかもしれません。
このタイプのアプリケーションに適応するために、アプリケーションがインストールされた時にダイナミックに接続を割り当てて、まるでそれがあらかじめわかっていたかのように、その情報を登録するためのメカニズムを提供します。 そして、登録された MIDlet とコミュニケートするためのメカニズムを使用するのに必要な情報をエージェントに送ることができます。
例えばアプリケーションが UDPDatagramConnection
を開く際にポート番号を指定せず、現在利用可能なポート番号からダイナミックに割り当てるように要求します。
registerConnection
を呼び出すことにより、MIDlet はそれがインバウンド・コミュニケーションのための目標であることを AMS に通知します。この通知は MIDlet が破棄(破棄状態の定義に関しては「MIDlet ライフサイクルの定義」を参照してください)された後にも有効です。
アプリケーションが携帯電話(さかき注:デバイス)から削除される場合、ダイナミックなコミュニケーション接続は自動的に登録解除されます。
インストール時に、既知のアドレスに関するインバウンド・コミュニケーションを望む各 MIDlet のマニフェストかアプリケーション・ディスクリプタ・ファイルの中の Push 登録属性から情報を得て AMS にて記録します。 一度インストールが正常に完了(OTA 推奨手続きに沿って、インストール通知メッセージを正常に送信し、アプリケーションを公式にインストールします)後、MIDlet はインバウンド・コミュニケーションを受信するでしょう(例えば Push 通知イベント)。
AMS が始動すると、それは登録された接続リストをチェックして、インバウンド・コミュニケーションを受け取る準備をします。
通知が到着すると AMS は登録された MIDlet を開始します。
そして各種入出力操作において必要とする、特定の接続タイプに対応する接続を MIDlet は Connector.open()
を呼び出して開きます。
例えば、サーバー・ソケットに対してアプリケーションは acceptAndOpen()
メソッドを使用してソケットに接続し、続いて receive()
メソッドを使用して提供されたメッセージを読み出します。
メッセージ指向の転送において、インバウンド・メッセージは AMS によって読み込まれ、MIDlet がデータの読むように要求するまで配送のために保存します。 ストリーム指向の転送において、接続要求がタイムアウトになるまでサーバーが接続を受け入れない場合、接続は失われます。
MIDlet が登録された Push 接続通知に対応して開始する時、どれが現在実行中のアプリケーションになるかはプラットフォームに依存します。
MIDlet ライフサイクルは中断している MIDlet が、pauseApp()
の呼び出しから destroyApp()
の呼び出しの間に見ることができる想定された振る舞いを定義しています。
スイートにはコミュニケーションのためのよく知られた/Well-Known ポートを持つ MIDlet を含んでいます。
startApp()
処理中に受信データを取り扱うためにスレッドを開始します。
別々のスレッドを用いるのは、正常なユーザーインタフェース・イベントを妨げるブロッキングを伴う入出力操作との衝突を避けるために推奨される方法です。
スレッドは MIDlet が破棄されるまでメッセージを受け取りつづけます。
このサンプルのディスクリプタ・ファイルは静的な Push 接続登録を含んでいます。 また、この MIDlet がインバウンド Push メッセージにデータグラム接続を使用する許可を必要とする指示も含みます(MIDlet パーミッションに関する詳細についてはパッケージ概要の PushRegistry のセキュリティを参照してください)。 注記:サンプルは突発するデータグラムのサンプルとして有効です。受け取ったメッセージを処理して接続ループをするために記述されています。
MIDlet-Name: SunNetwork - チャット・デモ MIDlet-Version: 1.0 MIDlet-Vendor: Sun Microsystems, Inc. MIDlet-Description: ネットワーク・デモンストレーション・プログラム for MIDP MicroEdition-Profile: MIDP-2.0 MicroEdition-Configuration: CLDC-1.0 MIDlet-1: InstantMessage, /icons/Chat.png, example.chat.SampleChat, * MIDlet-Push-1: datagram://:79, example.chat.SampleChat, * MIDlet-Permissions: javax.microedition.io.PushRegistry, \\ javax.microedition.io.Connector.datagramreceiver
public class SampleChat extends MIDlet { // カレントのインバウンド・メッセージ接続 DatagramConnection conn; // メッセージ読み出しスレッドの終了フラグ boolean done_reading; public void startApp() { // アクティブな接続のリスト String connections[]; // このセッションがインバウンド接続通知のために開始 // されたか否かをチェックします。 connections = PushRegistry.listConnections(true); // ディスクリプタ・ファイルにて静的に構成した接続に対する利用 // 可能なインバウンド・メッセージのためにインバウンド // メッセージ処理スレッドを開始します。 for (int i=0; i < connections.length; i) { Thread t = new Thread (new MessageHandler( connections[i])); t.start(); } ... } } // インバウンド・メッセージを読むのをやめて、AMSリスナー // のPush接続を開放します。 public void destroyApp(boolean conditional) { done_reading = true; if (conn != null) conn.close(); // 必要に応じて、現在のセッションが終了することをネットワー // ク・サービスに通知します。 ... } // 必要に応じてネットワーク・サービスに通知します。 public void pauseApp() { ... } // 別々のスレッドでインバウンド・メッセージを取り扱う内部クラスです。 class MessageHandler implements Runnable { String connUrl ; MessageHandler(String url) { connUrl = url ; } // メッセージのフェッチを行う、ブロッキングを伴う受信ループです。 public void run() { try { // インバウンド・メッセージとバッファに保持されているインバウ // ンド・メッセージに対応する接続ハンドルを取得します。 DatagramConnection conn = (DatagramConnection) Connector.open(connUrl); Datagram data = conn.newDatagram(conn.getMaximumLength()); // インバウンド・メッセージを読み出します。 while (!done_reading) { conn.receive(data); ... } } catch (IOException ioe) { ... } ...
スイートには MIDlet が最初に起動した時に初めてダイナミックにポートを割り当てる MIDlet を含みます。
このサンプルのディスクリプタ・ファイルは、アプリケーションがインバウンドの Push メッセージにデータグラム接続を使用する許可を必要とする指示を含みます。 MIDlet が初めて実行されるときにコンストラクタはダイナミックな接続割り当てを行います。 オープンされている接続をサブシーケンス・セッションで使用し、その後のセッションでインバウンド接続通知に対応して再開させることができます。
MIDlet-Name: SunNetwork - Demos MIDlet-Version: 1.0 MIDlet-Vendor: Sun Microsystems, Inc. MIDlet-Description: ネットワーク・デモンストレーション・プログラム for MIDP MicroEdition-Profile: MIDP-2.0 MicroEdition-Configuration: CLDC-1.0 MIDlet-1: JustCallMe, /icons/Ping.png, example.ping.SamplePingMe, * MIDlet-Permissions: javax.microedition.io.PushRegistry, \\ javax.microedition.io.Connector.datagramreceiver
public class SamplePingMe extends MIDlet { // Push 登録するカレント・アプリケーションの名前 String myName = "example.chat.SamplePingMe"; // Push 接続の登録済みリスト String connections[]; // インバウンド・データグラム接続 UDPDatagramConnection dconn; public SamplePingMe() { // Ping 接続が既に登録されているかどうかチェックします。 // この MIDlet を初回実行時にダイナミック接続の確保を行い // ます。 connections = PushRegistry.listConnections(false); if (connections.length == 0) { // 帯域外通知のためのダイナミック・ポートを要求します。 // (ポート番号を省略すると使用可能なポートの中からシ // ステムが確保します。) try { dconn = (UDPDatagramConnection) Connector.open("datagram://"); String dport = "datagram://:" + dconn.getLocalPort(); // MIDlet が終了した後にメッセージをポストすると MIDlet が目覚 // めるようにポートを登録します。 PushRegistry.registerConnection(dport, myName, "*"); // ネットワークに自分のデータグラム・アドレスをポストします。 ... } catch (IOException ioe) { ... } catch (ClassNotFoundException cnfe) { ... } } public void startApp() { // まだ接続がオープンされていなければオープンします。 if (dconn == null) { // dconn がコンストラクタによってオープンされていないので // これがはじめての実行ではありません。 // 受信したデータグラムによる開始かどうかチェックします。 connections = PushRegistry.listConnections(true); if (connections.length > 0) { // 受信可能な未処理のデータグラムがあります。 dconn = (UDPDatagramConnection) Connector.open(connections[0]); // データグラムを読み出します。 Datagram d = dconn.newDatagram(dconn.getMaximumLength()); dconn.receive(d); } else { // 未処理のデータグラムはありませんが、後で使用するために // 接続をオープンします。 connections = PushRegistry.listConnections(false); if (connections.length > 0) { dconn = (UDPDatagramConnection) Connector.open(connections[0]); } } } public void destroyApp(boolean unconditional) { // 終了する前に接続をクローズします。 if(dconn != null){ dconn.close() dconn = null } } ...
メソッドの概要 | |
---|---|
static String |
getFilter(String connection)
要求した接続に対応する登録されたフィルタを返します。 |
static String |
getMIDlet(String connection)
要求した接続に対応する登録された MIDlet を返します。 |
static String[] |
listConnections(boolean available)
カレントの MIDlet スイートのために登録された接続リストを返します。 |
static long |
registerAlarm(String midlet,
long time)
指定されたアプリケーションを指定の時刻に実行するように登録します。 |
static void |
registerConnection(String connection,
String midlet,
String filter)
アプリケーション管理ソフトウェアとのダイナミック接続を登録します。 |
static boolean |
unregisterConnection(String connection)
ダイナミック接続を登録解除します。 |
クラス java.lang.Object から継承されたメソッド |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
メソッドの詳細 |
---|
public static void registerConnection(String connection, String midlet, String filter) throws ClassNotFoundException, IOException
アプリケーション管理ソフトウェアとのダイナミック接続を登録します。 一度登録すると、接続が記述ファイルに最初から記載されていたようにダイナミック接続は扱われます。
ダイナミック接続の登録のための解説は静的な登録と同じ Push を登録するための属性です。
connection
または filter
引数が null
ならば、IllegalArgumentException
を throw します。
midlet
引数が null
ならば、ClassNotFoundException
を throw します。
connection
- Generic Connection 接続文字列(プロトコル、ホスト、ポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。midlet
- 新しい外部データによって起動する MIDlet のクラス名を渡します。
ディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>
レコードで命名されている MIDlet を登録しなければなりません。
このパラメータは前述のクラス記述で定義された Push 登録属性で、MIDletClassName
と同じセマンティクスを持っています。filter
- どの送信元が MIDlet を起動させることができるかを示す接続 URL 文字列を渡します。
IllegalArgumentException
- 接続文字列が有効ではないか、フィルタ文字列が有効でなければ throw します。
ConnectionNotFoundException
- 要求された接続プロトコルをランタイム・システムが Push デリバリにおいてサポートしていない場合に throw します。
IOException
- 接続が既に登録されているか、登録要求を取り扱うために必要なリソースが足りない場合に throw します。
ClassNotFoundException
- 現在の MIDlet スイート内で MIDlet クラス名が見つからないか、またはこのクラスがディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>
に含まれていない場合に throw します。
SecurityException
- MIDlet が接続を登録するために必要なパーミッションを持っていない場合に throw します。unregisterConnection(java.lang.String)
public static boolean unregisterConnection(String connection)
ダイナミック接続を登録解除します。
connection
- Generic Connection 接続文字列(プロトコル、ホスト、ポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
true
を、接続が登録されていないか引数 connection
が null
の場合は false
を返します。
SecurityException
- 別の MIDlet スイートが登録した接続を登録解除しようとすると throw します。registerConnection(java.lang.String, java.lang.String, java.lang.String)
public static String[] listConnections(boolean available)
カレントの MIDlet スイートのために登録された接続リストを返します。
available
- true
を渡すと入力として利用可能な接続リストを、false
を渡すとカレントの MIDlet スイートのために登録されている全ての接続リストを返します。
public static String getMIDlet(String connection)
要求した接続に対応する登録された MIDlet を返します。
connection
- Generic Connection 接続文字列(プロトコル、ホスト、ポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
connection
が null
ならば null
を返します。registerConnection(java.lang.String, java.lang.String, java.lang.String)
public static String getFilter(String connection)
要求した接続に対応する登録されたフィルタを返します。
connection
- Generic Connection 接続文字列(プロトコル、ホスト、ポート番号)を渡します(オプションのパラメータをセミコロン (;) 区切りで含めることもできます)。
connection
が null
ならば null
を返します。registerConnection(java.lang.String, java.lang.String, java.lang.String)
public static long registerAlarm(String midlet, long time) throws ClassNotFoundException, ConnectionNotFoundException
指定されたアプリケーションを指定の時刻に実行するように登録します。
PushRegistry
は現在のスイートで1つの MIDlet あたりに1つの実行時刻の指定をサポートしています。
アプリケーションの実行中、アプリケーションが時刻に基づいたイベントの通知に TimerTask
を使用することを想定しています。
既に実行時刻が登録されている場合、前回の値を返します。アラームをはじめて登録する場合は 0
を返します。
midlet
- アラーム時刻に達した時に実行するカレントの MIDlet スイート中の MIDlet のクラス名を渡します。
ディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>
レコードで命名されている MIDlet を登録しなければなりません。
このパラメータは前述のクラス記述で定義された Push 登録属性で、MIDletClassName
と同じセマンティクスを持っています。time
- MIDlet を実行する時刻を Date.getTime()
で得られる形式で渡します。
Date.getTime()
で得られる形式で返します。
ConnectionNotFoundException
- ランタイム・システムがアラームベースのアプリケーション実行をサポートしていないなら throw します。
ClassNotFoundException
- 現在の MIDlet スイート内で MIDlet クラス名が見つからないか、またはこのクラスがディスクリプタ・ファイルか jar ファイル内のマニフェストの MIDlet-<n>
に含まれていない場合に throw します。
SecurityException
- アラームの登録を行うためのパーミッションを MIDlet が所持していない場合に throw します。Date.getTime()
,
Timer
|
Unofficial "CLDC 1.1 + MIDP 2.0" API Reference. (日本語版) |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
公式仕様書原文の著作権表記等(※): Mobile Information Device Profile Specification ("Specification") Version: 2.0 Status: FCS Release: November 5, 2002 Copyright 2002 Sun Microsystems, Inc. and Motorola, Inc. All rights reserved. | ※ただしこの API リファレンスは英語仕様を一語一句正確に翻訳したものではなく、一度私が英語の仕様原文を読んだ上で元の意味と構造をなるべく保つように書き起こしたものです。このため一部は完全に異なる説明となっています。また CLDC 1.1 部分は同仕様の範囲外であるため、まったく参考とはしていません。 ※仕様書のライセンス上、問題は無いと考えておりますが、万が一問題があるとお考えの関係者の方がいらっしゃいましたらメールにて連絡をいただけると幸いに存じます(第一言語に日本語、第二言語に英語を希望しますが、返信は基本的に日本語で行います)。 |