5800XMでMIDPアプリを動かすのは一部難があります。というのもハードウェア・キーを省略し徹底的にタッチ・スクリーンを活用するようになっているからです。MIDPアプリに対しては組み込み済みJVMが提供するバーチャルなキーボードが使えるのですがキーが限られたものになっています。ナビキー+αではKKJConvは言うに及ばずPiClipなども動かせません。ちなみに現行の5800XMではApplication Managerで設定することにより2種類のバーチャル・キーボードとキーボード無しの状態がMIDPアプリに対して選択可能です。
ではMIDPアプリ側から5800XMに対応するための方法を探ってみようと考えてみました。MIDP2.0のCanvasクラスにはpointerPressed(int x, int y), pointerReleased(int x, int y), pointerDragged(int x, int y)といったタッチ・インターフェースにも使えそうなコールバック・メソッドが備わっています(必ずしもタッチとは限らなくて他のポインティング・デバイスも対象と思います) 。また、それらのイベントが有効かどうかを調べるboolean hasPointerEvents()というメソッドもあります。
と、いうことで簡単なテストプログラムで試してみました。
public void pointerReleased(int x, int y) { iPointX = x; iPointY = y; this.repaint(); }
えらく単純な部分だけの紹介ですが、これに加えてpaintルーチンの中でiPointXとiPointYの数値を画面に出すようにしておくとタッチした場所に応じたx, yが分かるというものです。
Nokia S605thエミュレーターで試してみると、ちゃんとタッチ・イベントを拾うことが出来ました。余談ですが以前はS60エミュレーターとMIDPのエミュレーターは別でしたが5thからは一つのエミュレーターで両方のテストが出来ます。MIDPのテストは、エミュレーターのFile/OpenでJARファイルを選び、実機同様にインストールを行います。
これで低レベルなタッチ・イベントが取得出来ることは確認できました。ゲームやアプリ独自のバーチャル・キーボードなどは、これで作成出来ますね。ってKKJConv Virtual Keyboardは期待しないでね (^_^;)
標準UIの提供する部品については何もしなくても概ねタッチすると反応するみたいです。ということで10キーなどに操作を頼っている部分だけタッチ・イベントの取得で代替すれば何とかなりそうです。今後S605thデバイスがメジャーになってくると対応するMIDPアプリも増えてくるものと期待します。
2 comments untill now