Mobile:NEWS 2003年9月5日 06:18 PM 更新

エンタメiアプリを作ろう
第4回 待ち受けiアプリにしてみよう

iアプリ版カメラを待受けアプリにしてみる。

 アニメーションフレームを実装し、撮影画像を見せる部分を強化したiアプリ版カメラですが、今回は待ち受け画面で見られるように待ち受けiアプリとして機能するようにしてみましょう。

待ち受けiアプリの仕組み


 待ち受けiアプリは上図のよう状態を変更できます。

(1)活性化状態
 通常のアプリを実行している時と同様にユーザーの手により操作が行える状態。プログラムではdeactivate()メソッドにより非活性化に移行できる

(2)非活性化状態
 アプリは動作しているが、ユーザーの手により操作することができない状態。ユーザーが待ち受けキーを押した場合に活性化状態に移行される。

(3)休眠状態
 電池の消費を防ぐためにアプリの動作が停止している状態。非活性化時にsleep()メソッド呼ぶことで休眠状態に移行できる。

 状態の遷移には決まりがあり、休眠状態へは非活性化状態からのみ遷移することできます。この条件を踏まえてiアプリ版カメラを待ち受けiアプリにしてみましょう。

待ち受けiアプリとしての動作

 現在のiアプリ版カメラを待ち受けiアプリにする際の動作を決めておきましょう。

(1)活性化状態
 iアプリ版カメラでは従来の操作ができる。

  • 非活性化状態時、待受キーで活性化となる。

(2)非活性化状態
 iアプリ版カメラでは、撮影画像の閲覧がアニメーションフレーム付きで動作する。

  • 活性化状態時、待受キーで非活性化となる。
  • 休眠状態時、フリップが開けられた場合に非活性化となる。

(3)休眠状態
 iアプリ版カメラは休眠状態。

  • 活性化時や非活性化時、本体が閉じられた場合に休眠状態となる。

 以上の機能をiアプリ版カメラに実装してみましょう。

待ち受けiアプリに置き換える

 現状のiアプリでは待受けアプリとして動作しません。待受けアプリはIApplicationではなくMApplicationを継承して作成します。

※待受けアプリではjamファイルの「MyConcierge」をYesに設定する必要があります。

システムイベントの判断

 待受けアプリではシステムイベントが発生し、状態を把握できます。

processSystemEvent(int Type,int Param) {
switch (Type) {
 case CLOCK_TICK_EVENT
  //ネイティブの時計の時刻が変化
  break;
 case MODE_CHANGED_EVENT
  //非活性化や休眠から活性化の状態に変化
  break;
 case WAKEUP_TIMER_EVENT
  //ウェイクアップタイマがエクスパイヤ
  break;
 case FOLD_CHANGED_EVENT
  //フリップの状態が変化
  break;
 }
}

活性化状態と非活性化状態の切り替え

 活性化状態と非活性化状態の切り替えは端末にある待ち受けキーになります。待ち受けキーは端末それぞれですが、アプリで待ち受けキーを押されたことを判断するのはKEY_IAPP定数を使用し、非活性化に移行する場合はdeactivate()メソッドを使用します。

//活性化状態→非活性化状態へ移行
if (Param==Display.KEY_IAPP) {
 //非活性化に移行
 deactivate();
}

休眠状態に遷移

 iアプリ版カメラは本体を閉じた際に休眠状態になります。開閉の状況変化時に休眠状態に移行するのでprocessSystemEvent内に処理をおきます。

processSystemEvent(int Type,int Param) {
 //開閉の状態が変化した
 if (Type== FOLD_CHANGED_EVENT) {
  if (Param==0) {
   //本体が閉じられた
   ※休眠処理
  } else {
   //本体が開けられた
   ※非活性化時の状態に移行
  }
 }
}

 FOLD_CHANGED_EVENT(本体の開閉状態変化イベント)はParamによって開け閉めの判断を行うことができます。ここでは活性化時にフリップが閉じられる可能性も考えられます。その場合、一度非活性化状態にしたのちに休眠状態へ移行する必要があります。

起動方法の確認

 待受けアプリは通常起動することもできます。この場合、通常起動された場合のチェックを行うことで、通常起動と待ち受け起動された場合の処理を変更すると親切な仕組みになります。起動状況の確認はgetLaunchType()メソッドで確認できます。

//待ち受け起動かを確認
if (getLaunchType()==LAUNCHED_AS_CONCIERGE) {
 ※待受け起動時の処理
}

メール情報の取得

 待受けアプリの機能として未読メールがある場合にに変化を出してみるのも面白い機能の一つだと思います。PhoneSystemクラスのgetAttributeを使用することで可能です。

//未読メールが存在
if (PhoneSystem.getAttribute(PhoneSystem.DEV_MAILBOX)==
PhoneSystem.ATTR_MAIL_RECEIVED) {
 ※未読メールの状態変化処理
}
//センターにメールが存在
if (PhoneSystem.getAttribute(PhoneSystem.DEV_MAILBOX)==
PhoneSystem.ATTR_MAIL_AT_CENTER) {
 ※センターにメール存在の状態変化処理
}

未読メール状態センターにメール状態

※情報の取得はjamファイルの「GetSysInfo」をYesにすることで使用可能になり、指定がない場合はエラーになります

 今回、iアプリ版カメラを待受けアプリにしてみました。簡単な撮影機能付きの待受けアプリになり、少し使えるものになってきました。ほかにも思いつく機能はたくさんあるかと思います。活性化時にサウンドを再生するのもいいかもしれません。

 次回は505iへ対応させてパワーアップしていきましょう。

 今回の待受けiアプリ版カメラのソースはこちらです。ソースには活性化時にサウンドを再生する処理も含めてみました。

 
著者紹介
寺田雄一:携帯電話向けアプリの開発を行うRapl(らっぷる)の代表。ゲームなどエンタメ系アプリが主体だがビジネス系アプリの開発も行っており、現在は公式サイトのアプリ開発に携わっている。



関連記事
▼ 第1回 カメラを使ってみよう!
504iSから505iまで、ドコモの携帯電話で動作するiアプリの開発方法を全6回の連載でお届けする。第1回は、iアプリからカメラを操作する方法を学ぶ。

▼ 第2回 写真を保存してみよう
前回作成したiアプリ版カメラソフトに保存機能を実装する方法を説明する。

▼ 第3回 飾りをつけてみよう
iアプリ版カメラにエンタメらしい機能を考え実装してみる。

▼ ドコモ四国、第2回iアプリコンテスト
ドコモ四国はiアプリおよび、505iで動作するFlashコンテンツのコンテストを開催する。


関連リンク
▼ 第2回ドコモ四国iアプリコンテスト
▼ NTTドコモ四国
▼ アプリ★ゲット

[Rapl 寺田雄一, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.



モバイルショップ

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

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