2009/02/05

iアプリメモ

久しぶりにiアプリを書いたのでメモ。DoJa 5.1プロファイル。

Java(c)2 Standard Editionが見つかりませんとエラーがでる。

JDKが入っているにもかかわらず、DoJaから見つけられなくなっていた。

起動時どころかアンインストーラも同エラー

そんなときは、J2SDKを入れなおすのがいいみたい。

たまたま、Jdk1.4.2_16しか入っていなかったので、1.4.2_19のインストーラを実行して追加インストールしたら、DoJaも正常に見つけられるようになった。どうも、Java_Homeとか環境変数ではない何かをみているきがする。

DrawArea

DoJa 3.0からデフォルトの描画領域はどんなに画面が大きくても240x240になるらしい。

これを大きくするにはADFでDrawArea = 480x854とか書いてあげればよい。

ここ参照

ビルドするときは、エミュレータの端末サイズを元にチェックするので、設定→エミュレータ環境設定→端末ウィンドウで、ビルドしたい画面サイズの端末設定を作ってあげる。

次に、端末→作成した端末設定を選択する。

これをしないとDrawAreaの値が不正です。とか怒られる。

Eclipseのときは、Window→Option→Dojaの設定で同様にエミュレータ設定をして、RunConfigurationで実行時の端末設定を変更すればOK

しかし、480x854とか、うちのディスプレイじゃ表示しきれないのでやめて欲しい。

カメラ

DoJa 3.0プロファイルから、カメラが標準で使えるようになった。デフォルトではJPEG圧縮っぽい。

CameraIdは0が外側のカメラ、1が自分撮り用のインカメラ

Camera#setImageSizeを呼ぶとカメラの画像サイズを変えられる。

で、Camera#takePicture()を呼ぶとNativeのカメラが起動される。

この画面ではなぜか、撮影サイズと画質を設定できない。あらかじめ上記のsetImageSizeで設定しておくこと。(他のやり方があったら教えてください。)

撮影した画像はgetImage(0)でMediaImageを取得して、use()して、いろいろいじったり、ImageStore.addEntryでマイピクチャに放り込んだりできます。

ついでにDoJa3.5から、CodeReader.getCodeReader(cameraId)でバーコードリーダーとして起動も可能。共通でQRとJANコードは読めるようだ。書棚サイトとか作るときに便利かもしれない。

HTTPがiアプリの取得元サイトにしか張れないので、ちょいと不便

ImageLabel

撮影した画像を表示するのにPanelベースの場合、ImageLabelを使う。

ImageLabelの最大サイズは、端末の描画領域に制限される。

デフォルトならば、240x240、DrawArea設定しているならばそのサイズ

このサイズはDisplay.getWidth()とDisplay.getHeight()で取得できる。

Panelの場合、描画領域をはみ出すとスクロールできるようになるが、Display.getXXXはもとのDrawAreaのサイズを常に返してくる。

例えば、240x240の状態で、他のコンポーネントのある画面の末尾にImageLabelで貼り付けると、240px分下にスクロールできるようになる。

なお、ImageLabelは、そのサイズ以上の画像を設定した場合、ImageLabelのサイズより大きい部分は切られてしまう。

ImageLabelのサイズに収めたい場合は、次のようにする。

Image img = Image.createImage(Display.getWidth(), Display.getHeight()); Graphics g = img.getGraphics(); g.drawScaledImage(元画像, 0, 0, Display.getWidth(), Display.getHeight(), 0, 0, 元画像.getWidth(), 元画像.getHeight()); imgLabel.setImage(img);

比率を保持して縮小とかは、適宜頑張れ!

自動更新機能

アプリの中からバージョンアップを呼び出せる。

DoJa開発ガイド 11.5 iアプリ更新機能連携起動がそれ

IApplication#launch(LAUNCH_VERSIONUP, null);を呼ぶと、バージョンアップしますか?というダイアログが表示され、Yesを押すとiアプリの機能メニューにあるバージョンアップが実行される。

Noを押すとそのまま処理継続される。

このメソッドは、バージョンアップの成功、失敗、キャンセルを返さない。

どうやら、バージョンアップ実行すると、アプリはいったん終了され、成功・失敗・更新無し問わずに再起動扱いとなる。

ダイアログでNoを押してキャンセルした場合のみ処理続行なので、launchの直後に、バージョンアップは必須ですとかダイアログをだして、強制終了することも可能。

アプリの起動直後にこのメソッドを書いてしまうと、サーバ側のJAMに変更がないにもかかわらず、必ずダイアログが表示されてしまい、かっこ悪いし現実的でないので、自前でバージョン管理(チェック)は必須となる。

ADFのAppVerはアプリ内から読めないらしいから、AppParamでパラメータとして渡すしかないかもしれない。

バージョンアップはADFのLastModifedDateの設定が、自分より新しいかをチェックしているだけ。アプリを変えたらADFのアップロードも忘れずに。

0 件のコメント: