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); }
引き続き頑張る!