Mobile:NEWS 2002年8月23日 01:42 AM 更新

ビジネスiアプリ開発講座
第2回 待ち受けiアプリの実装テスト(2/2)


前のページ

活性化と非活性化を切り替える

 待ち受けiアプリは作れましたが、一度活性化させてしまうとiアプリを終了しないと待ち受け画面に戻らないのは不便です。これをもう一度活性化ボタンを押すことで、非活性化状態になるように変更してみます。

 活性化ボタンを表すKEY_IAPPが“離された”というイベントを取得しdeactivate()を呼ぶようにすると、ユーザーが活性化ボタンで活性化・非活性化の状態を切り替えることができるようになります(KEY_IAPPが“押された”というイベントで処理すると、非活性化後すぐに活性化してしまいます)。

public class A extends MApplication {
 public void start() {
  Display.setCurrent(new Canvas() {
   public void paint(Graphics g) {
    g.drawString("Hi! 待ち受けiアプリ", 10, 20);
   }
   public void processEvent(int type, int param) {
    if (type == KEY_RELEASED_EVENT && param == KEY_IAPP) {
     deactivate(); // 活性化状態から非活性化状態に移行する
    }
   }
  });
 }
}

「machiuke2.zip」 非活性対応待ち受けiアプリ。504iでhttp://uni-labo.com/keitaijava/iappli/machiuke/2/machiuketest.htmlからダウンロードすることもできます。

休眠状態を使って消費電力を抑える

 待ち受けiアプリは非活性化しても、JavaVMは動作し続けるためにバッテリーを多く消費してしまいます。これを休眠状態を使用し消費電力を抑えるようにします。

import com.nttdocomo.ui.*;

public class A extends MApplication {
 public void start() {
  Display.setCurrent(new Canvas() {
   public void paint(Graphics g) {
    g.drawString("Hi! 待ち受けiアプリ", 10, 20);
   }
   public void processEvent(int type, int param) {
    if (type == Display.KEY_RELEASED_EVENT && param == Display.KEY_IAPP) {
     deactivate(); // 活性化状態から非活性化状態に移行する
     sleep(); // 非活性化状態から休眠状態に移行する
    }
   }
  });
 }
 public void processSystemEvent(int type, int param) {
  if (type != MODE_CHANGED_EVENT) { // 活性化ボタンが押された
   try {
    sleep(); // 再び休眠状態に移行する
   } catch (Exception e) { // 活性化状態でsleep()を呼ぶと例外が発生
   }
  }
 }
}

 非活性化状態でsleep()を呼ぶことで休眠状態となるわけですが、注意しないといけないのが、processSystemEventが呼ばれる際に再び非活性化状態に戻ってしまうということです。そのため、sleepingという休眠状態フラグを使用し、休眠状態中は活性化ボタンが押されない限り、再び休眠状態に移行するようにします。この時、sleep()を活性化状態で呼ぶと例外が発生するのでtry-catchで囲みます(フラグを使って活性化状態の時には呼ばないようにする方法もあります)。

「machiuke3.zip」 休眠対応待ち受けiアプリ。504iでhttp://uni-labo.com/keitaijava/iappli/machiuke/3/machiuketest.htmlからダウンロードすることもできます。

待ち受けiアプリのAPI紹介

 基本的な待ち受けiアプリの作成に関しては問題ないと思います。以下にそのほかの待ち受けiアプリ(MApplication)のAPIを簡単に紹介します。詳細は、ドコモ提供のAPIリファレンスをご覧ください。

  • アニメーション定期更新アラームなどのAPI

 一定時間後にイベントが発生するように設定し、イベントが発生するまで休眠状態で待つことで消費電力を抑えた、アニメーションや定期更新が実現できます。またアラーム機能などの作成にも利用できます。

setWakeupTimer(int ms)一定時間後に通知するようにタイマを設定します
getWakeupTimer()タイマの通知までの残り時間を取得します
resetWakeupTimer()タイマを解除します
processSystemEvent(WAKEUP_TIMER_EVENT, 0)設定した時刻になったことを表します自動的に起動する

時計用API

 携帯電話に内蔵された時刻の“分”が更新されたときにイベントが発生するように設定できます。内蔵時計にぴったり合った時計アプリケーションが作成できます。

setClockTick(boolean enabled)内蔵時計の分更新に同期した通知の設定・解除をします
processSystemEvent(CLOCK_TICK_EVENT, 0)分が更新されたことを表します

フリップの開閉検知API

 フリップが開けられたり、閉じられたときにイベントが発生します。開けた時に画面を更新したり、ネットワークにアクセスしたりする機能を実装します。また、このイベントが発生すると休眠状態であっても非活性化状態に遷移するため、不必要であれば再び休眠状態に戻るように作成する必要があります。このイベントを発生しないようにすることはできません、これはちょっと不便な点です。

processSystemEvent(FOLD_CHANGED_EVENT, 0)フリップが閉じられたことを表します
processSystemEvent(FOLD_CHANGED_EVENT, 1)フリップが開けられたことを表します

待ち受けiアプリの制限「WebTo機能不可」

 非常に便利な待ち受けiアプリですが、1つだけ制限があります。

 504iシリーズから、iアプリからブラウザへ連携すること(WebTo機能)が可能になりました(下記コード参照)。しかし、待ち受けiアプリを待ち受けiアプリとして起動した場合、この機能を使用することができません。

 // IApplication/MApplicationのメソッド内で
 launch(LAUNCH_BROWSER, new String[] { "http://uni-labo.com/" });


通常のiアプリと待ち受けiアプリのWebTo機能の違い

 このWebTo機能を使用すると、さまざまな便利サイトへ即時にアクセスできたり、必要に応じたウェブアプリケーションとの連動ができたりするだけに、残念な制限です。

 以上で、待ち受けiアプリの実装テストは終了です。待ち受け状態からのワンタッチ起動が体感できたと思います。待ち受けiアプリに適したケータイアプリケーションのイメージがつかめてきたのではないでしょうか。

 次回は、具体的なビジネスアプリ選びと、作成前の仕様決めを行います。

著者紹介
福野泰介:UNI-LABO社長。イントラネットと携帯電話を、プロキシ認証と圧縮通信によって強固なセキュリティと通信費の削減効果を提供する「パケットセイバー」を開発。「半パケ」という名称でISP向けにも技術を提供、ニフティにも採用されている。



関連記事
▼ ビジネスiアプリ開発講座第1回
モバイルアプリケーションの新天地を切り開くiアプリ。本連載では、504iシリーズからの新仕様「待ち受けiアプリ」に触れながら、その実力を探り、ビジネスiアプリとしての有用性を検証する

▼ ドコモ四国、iアプリコンテストを開催
ドコモ四国が504i向けiアプリのコンテストを開催する。全国からビジネスアプリやエンターテインメントアプリを募集し、iアプリの普及を目指す


関連リンク
▼ NTTドコモ四国
▼ アプリ★ゲット
▼ NTTドコモ四国 ニュースリリース

[福野泰介, ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.

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



モバイルショップ

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

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