ecr-rogo
実機対応のための変更点
このページでは、サンプルアプリの改善版についての情報を随時掲載していきます。


(1)P503iSについて
P503iSにてサンプルプログラム52本の動作確認を行いました。以下を除き、動作に問題はありませんでした。

対象アプリ
MyIntro, Intro3, Intro4, Intro5, IntroNet, IntroS


原因:
書籍(P114)で説明しましたパネルスクロールに関する問題がP503iSでも同様でしたので、ProfiFrmを以下の様に変更しました。


改善版ダウンロード(LHA形式で圧縮しています)
MyIntro
Intro3
Intro4
Intro5
IntroNet
IntroS


変更内容
書籍(P114)で説明しましたパネルスクロールに関する問題がP503iSでも同様でしたので、ProfiFrmを以下の様に変更しました。

(修正前)
System.getProperty( "microedition.platform" ).equal( "Panasonic P503i" )


(修正後)
System.getProperty( "microedition.platform" ).startsWith( "Panasonic P503i" )


P503iSでは、System.getProperty( "microedition.platform" )で"Panasonic P503iS"を返すので、equalの代わりにstartsWithを使うことで両方に対応しました。


注意点:
MyIntroに限っては、単純に変更するとアプリのサイズが10Kを超えてしまったため、ProfiFrmに以下の変更も加えております。


(修正前)
TopFrm.myP[ i ].substring( 0, 1 ).equals( "C" )


(修正後)
TopFrm.myP[ i ].startsWith( "C" )

元々、こちらの方がスマートでしたね。
サイズも減りましたし。。。(恥ずかしい)



(2)N503iの時間精度についての改善

対象アプリ StopWatch


原因
N503iでは、"System.currentTimeMillis()"や"new Date().getTime()"などのミリ秒単位の時間を取得して使った場合に、実際よりも早く時間が進んでしまうようです。調査したところ、本来は1000ms(1秒)の時間しか経っていないのに、約1024ms程の数値を示しました。そこで、N503iで上記のメソッドを使って時間をある程度正確に測定する必要がある場合は、この分を補正する必要があります。


改善版ダウンロード(LHA形式で圧縮しています)
StopWatch StopWatch_11.lzh(21.3KB)


変更内容
変更は、SWatchクラス内の以下の部分です。

(a)変数(時間計算)

private long ajust; // 時間計算補正値
を追加


(b)初期化を行うコンストラクタ

// 時間精度補正値
String kisyu = System.getProperty( "microedition.platform" );
if ( kisyu.equals( "pdc" ) )
{
ajust = 1024;
}
else
{
ajust = 1000;
}
を追加


(c)スレッド開始時に実行される(runメソッド)

strtTime = nowDate.getTime();
" / 100 "の部分を削除。精度補正時に割ることに変更


(c)現在時間表示(drawNowメソッド)

long nextTime = nextDate.getTime();
nextTime = ( ( nextTime - strtTime ) * 10 ) / ajust + prevTime;
nextTimeについても" / 100 "の部分を削除。
ajustで補正した上で、1000で割っている。
数学的には、
( nextTime - strtTime ) * ( 1000 / ajust ) / 100
のような書き方になりますが、iアプリでは小数点以下を
扱えないので、計算精度上の都合で
かけ算を先に行い最後にわり算を行っています。

CLOSE