Adobe AIR for Androidでアプリを作るメモ

Flash Builderを使ってAIRアプリを作ってみる。
アプリらしいものを作ったことはなかったのでちゃんと使う。
カメラを使うアプリをなにか作ってみるよ!

はじめに

Flexモバイルプロジェクトではなく、
ActionScriptモバイルプロジェクトで開発をしているので、
MXMLは使わずに全てASのコードだけでやってみる。
理由はAdobeのマニュアルを見てもMXMLの書き方がさっぱりわからないのと、
コードの分離が面倒なのでASだけにしようと思う。
MXML からスクリプトを分離する方法まとめ(4種類)
USB経由のデバッグ方法については以前書いたので
GALAXY nexusをUSB接続するメモ
こちらを参考に。
というわけで始めよう。

カメラを使いたい

カメラを起動させるコードはこちらを参考にした。
Adobe AIR for iOSによるiPhone/iPadアプリケーション開発第4回 カメラとカメラロール
AIR Androidアプリ作成:Flash, Flash Builder 4.6 | 04:カメラ

さっそくコードを書いて実行!ところがカメラが起動しない。
何度かコードを見返したけどエラーもでてないしなんでだろうと2時間くらい悩む。
なんかハード関係?と思ってたらパーミッションを設定しないとカメラにアクセスできないらしい。
モアイまわし:Adobe AIR for Androidを使ったAndroidアプリ制作のコツ

さっそくプロジェクトを作ったときに生成されたsrcというディレクトリ内の(ファイル名)-app.xmlを編集する。

<!--<uses-permission android:name="android.permission.CAMERA"/>-->
↓
<uses-permission android:name="android.permission.CAMERA"/>

コメントアウトして実行すると無事にカメラが起動した。

AIR for androidでローカルの画像を読み込む

一日悩んだけど上手くいかなくてあーあ、って思ってたけど、
運よくやりかたを書いているページを見つけて小躍りしてる。
なにをやりたかったかというと、
androidに保存されてるローカルのファイルを読み込みたかった。
最初に書いたコードでは全然動かない。

public function loadFile():void{
	loads = new Loader();
	loads.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadCompleted);
	loads.load(new URLRequest('/mnt/sdcard/DCIM/Camera/IMG_20120608_134529.jpg'));
}

public function onLoadCompleted(e:Event):void{
	loads.x = stage.stageWidth / 2 - loads.width / 2;
	loads.y = stage.stageHeight / 2;
	addChild(loads);
}

AIR Androidアプリ作成:Flash, Flash Builder 4.6 | 2-12-5:ファイルの選択

こちらを参考にして普通にLoaderオブジェクトからloadメソッドを使ってとってこようとしたけどダメ。
そもそもローカルなのにURLRequestって変だよな、と思いつつAS3歴累計2ヶ月ほどの自分には他にどんな方法があるのかわからず、
どうすればいいのかさっぱり。
ASのデバッグ方法もいまだにわからない。
エラーがでないから動いてるのかどうかさえ不明。
how to load local image file in androidとかで探したけど英語サイトもビンゴなやつが見つからず。
たまたま見つけたサイト↓
AIRあげぽよ〜!iPhone/Android両対応アプリを本格的に作ったよ!のまとめ
にのってた参考リンク先にあった。
airfornadroid 目次 | android application
のさらにリンク先のここ。
Google グループ
ということでそのようにやったら読み込みができた。

public function loadFile():void{
	var ff:File = new File('/mnt/sdcard/DCIM/Camera/IMG_20120608_134529.jpg');
	var s:FileStream = new FileStream();
	s.open(ff,FileMode.READ);
	var data:ByteArray = new ByteArray();
	s.readBytes(data);
	loads = new Loader();
	loads.loadBytes(data);
	addChild(loads);
}

引き続き頑張る!