- - PR -
スクラッチパッドを使ってiアプリを実行
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-08 23:21
ご指導お願いします。
Doja3.5でiアプリを作っています。実機でテストをしたいのですが、jam,jarファイルだけでは動作しないみたいです。 スクラッチパッドを使って画像などを読み込めばできそうなのですが、スクラッチパッドの書き込み方がわかりません。 スクラッチパッドをどのように使えばいいのか教えていただけないでしょうか。 素人の質問ですみませんが、よろしくお願いします。 | ||||
|
投稿日時: 2006-05-09 00:34
http://www.atmarkit.co.jp/fmobile/rensai/doja04/doja04.html http://2php.jp/iapp/scratchpad.html で十分だと思いますが、、、「どのように」は不発揮性メモリなので、 適当に使えばいいのでは。 私もいまいち「スクラッチパッド」は分かってませんが。キーはアプリケーションごとで iあぷりが二つ a.jar b.jar があるとして a.jar でscratchpad:///0;pos=0 に書き込んで b.jar でscratchpad:///0;pos=0を読み込んだら データaとbで同じなのだろうか。 、、同じなんだろうなぁ。でも、上記の説明だと「アプリケーションごと」 になってるけど、、どっちだろ。 a書き込み==b読み込みだったら「アプリケーションごと」と違うぢゃん。 と思い。 | ||||
|
投稿日時: 2006-05-09 03:24
レスありがとうございます。
http://www.atmarkit.co.jp/fmobile/rensai/doja04/doja04.html ↑の通りに全部コピしてやったんですが、以下のようなエラーで。。。 全くの素人ですので何がなんだかサッパリです。涙 java.lang.NullPointerException at com.nttdocomo.ui.ImageLabel.setImage(+1) at GCTest.componentAction(+22) at com.nttdocomo.ui.Panel.fireComponentEvent(+26) at com.nttdocomo.ui.AbstractButton.processEvent(+91) at com.nttdocomo.ui.Panel.processEvent(+39) at com.nttdocomo.ui.EventHandler.handleKeyEvent(+211) at com.nttdocomo.ui.EventHandler.run(+180) もういちど全部見直してみます。 | ||||
|
投稿日時: 2006-05-09 10:27
こんにちわ。
エミュレータでは上手くのに、実機テストで失敗するって事でしょうか? | ||||
|
投稿日時: 2006-05-10 06:28
レスありがとうございます。
>エミュレータでは上手くのに、実機テストで失敗するって事でしょうか? いえ。エミュレーターですらできていません。 しかし実機でなら・・・という淡い希望を抱いてやってみましたがやっぱりだめでした。(苦笑 抽象的な書き方ですみませんでした。 具体的には、アプリで画像や音楽を使いたいんですが、スクラッチパッドの保存、読み込み、書き込みのソースはどこにどうやって書けばいいのかわからなくて困っているとこです。 わかる部分があれば、教えていただけませんか? | ||||
|
投稿日時: 2006-05-10 09:53
趣旨とはちょっとかけ離れてしまうかもしれませんが、画像や音楽はスクラッチパッドではなくjarに格納したほうが良いようです。
| ||||
|
投稿日時: 2006-05-10 11:38
こんにちわ。
エラーを見る限り、スクラッチパッド以外の部分がエラーを吐いている様に見えます(たぶん)。 ついでに、URLに載っているサンプル改造して実行しましたが、上手く動作しました。 サンプルを載せときます。importは書き加えてください。 スクラッチパッドへの書き込み、読み込み部分はURLのサンプルプログラムをコピーしました。 画像をカメラで撮影する様に変えてみました。 i回目起動時に (i-1)回目起動時の最後に撮影した画像が表示されます。 PadTest.java-------------- public class PadTest extends IApplication{ ImageCanvas cc = new ImageCanvas(); public void start(){ Display.setCurrent(cc); } } ImageCanvas.java--------- public class ImageCanvas extends Canvas{ private static int offset = 0; public ImageCanvas(){ try{ setSoftLabel(Frame.SOFT_KEY_1, "カメラ"); setSoftLabel(Frame.SOFT_KEY_2,"終了"); }catch(Exception e){ Dialog d = new Dialog(Dialog.DIALOG_ERROR, "エラー詳細"); d.setText("コンストラクタエラー " + e); d.show(); } } //画面表示 public void paint(Graphics g){ try{ Image image = getImageFromScratchpad(offset); g.lock(); g.clearRect(0, 0, getWidth(), getHeight()); System.out.println("画像はnull?"+image==null); if (image != null){ g.drawImage(image, 0, 0); } g.unlock(true); }catch (Exception e){ System.out.println(e); Dialog d = new Dialog(Dialog.DIALOG_ERROR, "エラー詳細"); d.setText("描画エラー " + e); d.show(); } } public void processEvent(int type, int param){ //キーが押されたら if(type == Display.KEY_PRESSED_EVENT){ if(param == Display.KEY_SOFT1){ //撮影 byte[]data = snap(); writeToScratchpad(data, offset); } if (param == Display.KEY_SOFT2){ IApplication.getCurrentApp().terminate(); } } } //撮影ルーチン private byte[] snap(){ byte[] img_buf = null; try{ //引数0はカメラID:0,1,2,..... Camera camera = Camera.getCamera(0); //画像の撮影可能サイズの取得 int pictureSize[][] = camera.getAvailablePictureSizes(); //撮影画像のサイズを設定(てきとー) camera.setImageSize(pictureSize[0][0],pictureSize[0][1]); //カメラの属性を設定 //連写モードの設定を行う //連写モード無効 camera.setAttribute(Camera.DEV_CONTINUOUS_SHOT, Camera.ATTR_CONTINUOUS_SHOT_OFF); //カメラの属性を設定 //画質の設定を行う //画質優先:ATTR_QUALITY_HIGH 標準:ATTR_QUALITY_STANDARD camera.setAttribute(Camera.DEV_QUALITY, Camera.ATTR_QUALITY_HIGH); //静止画を撮影 camera.takePicture(); //撮影した画像を取得 MediaImage mi = camera.getImage(0); mi.use(); //Imageデータへ変換 Image img = mi.getImage(); mi.unuse(); /////////////////////////////////////////////////////////////////// //静止画の大きさのbyteデータを保存する領域の確保 int img_length = (int)camera.getImageLength(0); img_buf = new byte[img_length]; //画像を読み出すための 入力ストリームを取得 InputStream inStream = camera.getInputStream(0); //img_bufにイメージのバイトデータを保存 inStream.read(img_buf); inStream.close(); }catch(Exception e){ System.out.println(e); Dialog dia = new Dialog(Dialog.DIALOG_ERROR, "撮影をキャンセル"); dia.setText(e+"\n"); dia.show(); } return img_buf; } //書き込み private void writeToScratchpad(byte[] data, int offset){ OutputStream out = null; try{ out = Connector.openOutputStream("scratchpad:///0;pos=" + offset); out.write(data); }catch (Exception e){ System.out.println(e); Dialog dia = new Dialog(Dialog.DIALOG_ERROR, "書き込み失敗"); dia.setText(e.toString() + "\n"); dia.show(); }finally{ try{ if (out != null){ out.close(); out = null; } }catch (Exception e){ out = null; } } } //読み込み private Image getImageFromScratchpad(int offset){ Image image = null; try { MediaImage mi = MediaManager.getImage("scratchpad:///0;pos=" + offset); mi.use(); image = mi.getImage(); }catch (Exception e){ System.out.println(e); Dialog dia = new Dialog(Dialog.DIALOG_ERROR, "読み込み失敗"); dia.setText(e.toString() + "\n"); dia.show(); } return image; } } [ メッセージ編集済み 編集者: クレやん 編集日時 2006-05-10 12:01 ] | ||||
|
投稿日時: 2006-05-10 19:29
ありがとうございます! MediaManagerでやってみます! |