龍谷大学> 理工学部> 数理情報学科> Team539> 樋口三郎> 担当科目> 2007 年> iアプリ/S!アプリ/オープンアプリを作ろうプロジェクト---数理情報演習>第 07 回

待受アナログ時計を作ろう

[目次|前回|次回|携帯Javaのページ|ローカルドキュメント]
Time-stamp: "2007-11-24 Sat 10:54 JST hig"

時刻の取得

Calendar 使います. API は DoJa/MIDP API でなく, CLDC API の中にあります.
import java.util.Calendar;
Calendar c = Calendar.getInstance();
String s=c.get(Calendar.HOUR) + "時" + 	
  c.get(Calendar.MINUTE) + "ふん" +
  c.get(Calendar.SECOND) + "秒くらいだよん";

放射状に針を描く

針をdrawLineで描くと, 始点は一定, 終点は, 極座標で考えるといいですね. 角度は時刻から決まります.

普通の極座標で言うと, 0時はπ/2であること, θの増加と時間の増加は逆方向であることに注意が必要

また, 今更ですが画面でy軸は下向きであることにも注意しましょう.

import java.lang.Math;
double s=Math.sin(Math.PI*1.0/3.0);
double c=Math.cos(Math.PI*1.0/3.0);
DoJaでは Math より精度の劣るけど速い floatMath を使えます. OpenGL用です.
import com.nttdocomo.ui.ogl.math.FloatMath;
float s=FloatMath.sin(3.14*1.0/3.0);
float c=FloatMath.cos(3.14*1.0/3.0);
Softbankやauでも独自拡張があるのかも.

始点終点を計算してdrawLineを使う以外にも, fillArc(int x, int y, int width, int height, int startAngle, int angle), drawArc(int x, int y, int width, int height, int startAngle, int angle)

を使う方法もあります. このangleはラジアンでなく角度です.

デバッグの方法

DoJa DoJa

待ち受けアプリ

前回のマルチスレッドのサンプルを待受化した 例 ResidentSample.javaを示しています. 以前に使用した画像 pose0.gif/png, pose1.gif/png が必要です.

iアプリ

DoJa 2.0(504i)以降でサポートされます. IApplication でなく MApplication を継承したクラスを作ります. ADF設定で, MyConcierge を Yes にします. プログラマの責任で, 活性化状態 ⇒ 非活性化状態 ⇒ 休止状態 の遷移を, それぞれ, MApplication クラスの void deactivate() , void sleep() メソッドで行います. 待受に関わるイベントを, MApplication クラスの void processSystemEvent(int type, int param) メソッドで拾えます.

S!アプリ

ADFオプション設定で, MIDlet-Resident を Y とするだけです. com.j_phone.system.DeviceControl クラスのオブジェクトに, MailListener, ScheduleAlarmListener, TelephonyListener を登録することで, 待受中に発生したイベントを拾えます.

EZアプリ

待受アプリとするための設定は特にありません. Phase2.5以降でのみ, com.kddi.matiuke.EventManager のオブジェクトに, AlarmEventListener, CallEventListener, CMailEventListener, EMailEventListener を登録することで, 待受中に発生したイベントを拾えます.

課題1

アナログ時計を作ろう

課題2

アナログ時計にいろいろな機能を追加しよう. 背景に画像を貼るとか, 振り子のアニメがあるとか, 文字盤をキャラクタが散歩してるとか, デザインを何種類か選べるとか, アラームが鳴るとか, ストップウォッチ機能があるとか, 各正しい時刻になったら鳩が出て来て鳴るとか.

課題3

時計を待ち受けアプリにしよう.