Mobile:NEWS 2003年11月21日 11:31 PM 更新

BREW プログラミング入門(5)
イベント処理って何だ?(2/2)


前のページ

アプレットのサスペンドとレジューム

 BREWアプレットは、同時に一つしか動作させることができません。しかし、複数のアプレットを起動したまま、それらを切り替えることはできます。それを可能にしているのが、サスペンド・レジューム機能です。携帯電話のユーザーはアプレットを起動したあと、それを“中断”することで、アプレットはサスペンド状態になります。

 APP_EVT_SUSPENDイベントは、ユーザーがアプレットを中断した場合などに受け取ります。イベントハンドラは、このイベントに対してTRUEを返すことで、「中断でございますワネ。承知しましたワ、ご主人様」と言って、アプレットは中断状態になります。

 もしAPP_EVT_SUSPENDイベントに対してFALSEを返しますと、「中断だぁ? うっせぇーんだよクソジジィ」といって、BREW実行環境に喧嘩を売ることになります。そうしますと、BREW実行環境は「ワシが中断しろと言っているのがわからんのかー! 勘当じゃぁ!」といって、今度は APP_EVT_STOPイベントを送りつけてきます。終了されちゃうんですねえ。

 さて、APP_EVT_SUSPENDイベントに対してTRUEを返した礼儀正しいお嬢様のほうは、ユーザーが中断したアプリを再開させますと、BREW実行環境が「起きる時間じゃぞ、ワシがまたかわいがってやろう。ムフフ」といって、今度はEVT_APP_RESUMEイベントを受け取ります。このとき、サスペンドされたときの状態がそのまま復元されます。


APP_EVT_SUSPENDイベントに対してTRUEを返した場合


APP_EVT_SUSPENDイベントに対してFALSEを返した場合

 以上の仕組みに関しましては、「BREW SDKユーザーズガイド」に記述がありますので、ご参照ください。

サスペンドとレジュームのエミュレート

 BREWエミュレータでサスペンドとレジュームをエミュレートすることができます。

 BREWアプレットを実行した状態で、メニューから[ツール]-[設定]を選択しますと、[設定]ダイアログが表示され、「BREWサスペンド中」というメッセージが画面に表示されます。これでサスペンド状態になります。

 レジュームするには、[設定]ダイアログで[キャンセル]ボタンを押せばいいです。


BREWエミュレータの[設定]ダイアログ

キーイベント

 BREW開発で最もよく使われるイベントはキーイベントですが、キーイベントには主に、EVT_KEY、EVT_KEY_PRESSED、EVT_KEY_RELEASEDという三種類があります。

 ユーザーが携帯電話のキーを押しますと、そのタイミングでEVT_KEY_PRESSイベントが通知されます。また、キーを離しますと、そのタイミングでEVT_KEY_RELEASEが通知されます。


 EVT_KEYイベントが通知されるタイミングは、携帯電話端末ごとに異なるようです。「BREW SDKユーザーズガイド」には、次のような記述があります。

デバイスメーカーの選択に応じて、キーが押されたとき、 または離されたとき、もしくはその両方で送られます。

 三種類のキーイベントのイベント パラメータはどれも同じ意味をもちます。wParamにはキーのキーコードが渡され、dwParamには修飾キーフラグが渡されます。

 キーコードとは、キーを表す定数です。「BREW APIリファレンス」の左側の目次の[キーコード]を選択すると、キーコードの一覧が表示されます。以下にいくつか抜き出してみました。

キーコード説明
AVK_SELECTセレクトキー
AVK_CLRクリアキー
AVK_UP上キー
AVK_DOWN下キー
AVK_LEFT左キー
AVK_RIGHT右キー
AVK_SOFT1ソフトキー1
AVK_SOFT2ソフトキー2


携帯電話のキー

 修飾キーフラグは、修飾キーを表すビット定数です。修飾キーとはパソコンのキーボードの[Shift]とか[Ctrl]にあたるもののようです。「BREW APIリファレンス」の[キーコード]-[修飾キーのビット]に記述がありますが、通常の携帯電話では使われることはないでしょう。

イベント処理のサンプルアプリ

 今回解説した七つのイベントをすべて使用したサンプルアプリを示します。名づけてニコチャンアプリです(クリックで別ウィンドウにソースコード表示)。

 このアプリを起動しますと、ニコチャンの黄色い顔が表示されます。セレクトキーを押下状態にしますと、ニコチャンの顔が怒った顔になります。セレクトキーを離しますと、元のニコニコ顔になります


 セレクトキーが押下状態であるかどうかを、アプレット構造体(NicoApplet)に格納しています。描画ルーチンでは、その状態に応じて描画を行っています。

 このアプリでは、アプレット構造体にIGraphicsオブジェクトを保持しています。IGraphicsオブジェクトは、描画ルーチンの中で取得・解放してもよいのですが、そのぶんだけ描画速度が落ちることになります。そこで、EVT_APP_STARTイベント処理の中でIGraphicsを取得して、それを実行中ずっと保持しています。そして、EVT_APP_STOPイベント処理の段階でオブジェクトを解放しています。このようなテクニックは、BREWで高速なゲームを作るときには、 必ず使うことになるでしょう。

 それから、今回のアプリでは、EVT_APP_RESUMEイベントを処理して、レジューム時に再描画を行っています。BREWアプリがサスペンド状態になると、別の画面が表示されますので、レジューム直後には元の画面表示を行う必要があります。

 また、EVT_APP_SUSPENDイベントでは、セレクトキー押下状態を解除しています。もし、セレクトキー押下状態でサスペンドされたら、どうなるでしょうか。実際にセレクトキーが押下状態ではないにも関わらず、内部的に押下状態フラグがたっているため、レジュームされたときに、怒った顔が表示されてしまいます。

 このようなサスペンド・レジューム時の細かな処理は、実際のアプリ開発では必ず必要になってくることでしょう。

※今回の記事のソースコードは、ソフィア・クレイドル のサイトからダウンロードできます。

著者紹介
倉谷智尋:ソフィア・クレイドル研究開発部チーフサイエンティスト。ソフィア・クレイドルは、2002年2月京都市にて、無限の可能性を秘めたソフトウェア職人たちが楽しく集い、自ずと自己実現が達成される場になることを目指して創業。在籍スタッフの平均年齢は20代前半と若いが、その大半がプログラミング歴10年以上とそのプロフェッショナリティは極めて濃い集団である。

 これまでにBREW用アプリケーションフレームワークケータイJavaプログラム圧縮技術ケータイJavaブラウザ技術、ケータイメッセンジャー技術などを総合的に研究開発し、「高品質な共通プラットフォーム」の実現を目指してきた。

ご感想、ご質問はこちら(zdnet-contact@s-cradle.com)まで。



関連記事
▼ BREW プログラミング入門(4):BREW の文字列について知ろう
前回は画面描画のAPI、インタフェースやアプレット構造体についての理解を深めました。今回は文字列の扱い方について解説します。

▼ BREW プログラミング入門(3):画面に描画をしてみよう
前回の連載では、HelloWorldアプレットを作成することで、BREWアプリケーションのおおまかな構造について学びました。今回は画面描画のAPIについて詳しく説明するとともに、インタフェースやアプレット構造体についての理解を深めます。

▼ BREW プログラミング入門(2):“HelloWorld”プログラムを作ろう
前回の連載では、BREW SDK 2.1をインストールするところまで解説しました。今回は実際にソースコードを書き、BREWエミュレータで動かしてみましょう。画面に "Hello World" と表示する簡単なBREWアプリを作成します。

▼ BREW プログラミング入門(1):BREW SDKをインストールしよう
本連載は、BREWに興味がありプログラミングを始めてみたいけれど、どこから手をつけてよいか分からない方々を対象に、ステップ・バイ・ステップでBREWプログラミングを行う方法を解説していきます。

▼ Qualcomm、携帯電話向けプラットフォーム「BREW」発表──au端末に搭載
▼ “携帯電話のOS”を目指すBREW──国内でも1号機
▼ BREWとは何か?──Javaとの違い

[倉谷智尋, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

前のページ | 2/2 | 最初のページ



モバイルショップ

最新スペック搭載ゲームパソコン
高性能でゲームが快適なのは
ドスパラゲームパソコンガレリア!

最新CPU搭載パソコンはドスパラで!!
第3世代インテルCoreプロセッサー搭載PC ドスパラはスピード出荷でお届けします!!