Titaniumと格闘

ちまたで有名なTitaniumを試してみた。
プログラマ業界から離れてしまった僕。だけどアプリって作ってみたいなーと思っていまして。
今更業界離れてるのにJavaとかobjective-cとかいちから勉強なんて…と思ってたら、
なんとJSで作れちゃうという神が、Titaniumタンなわけです。

iphoneもアンドロイドもどっちもOKという事なのですが、使ってみてわかるのは、アンドロイドは機能が少し制限されてたり、動くはずのものが上手く動かなかったりと、評判は結構悪いです。

そういうわけで、windows7+アンドロイドアプリをTitaniumで制作という、最も評判の悪い方法で作ってみてる次第です。

完成はもうちょっとかかりますが、今まで得たノウハウなんかを書いておければと思いまして、ブログをちょっと再開。

Titaniumでアンドロイドアプリを制作する時に必要なものは、「愛」それだけです。
そして挫けぬ心です。結構マジで。

以下、箇条書きでノウハウを。

・インストールは別サイト見て下さい
・Titaniumの解説本が出てますが、ネットのコピペです。最低です。こんなのを本にするとか、頭おかしいです。例えば、表紙に「iphone/android開発アプリ」って書いてるのに、録音機能について、ネットのコピペで普通にリファレンス書いて終わりです。ですが、録音機能は、androidでは動きません。なのでどっかの人がmodule作ってます。こんなの実際に動かしてみればすぐわかる事ですが、きっと公式のリファレンスとサンプルを書いて悦に浸ってアヘ顔になってたんでしょう。コピペを行なって動作確認をしないなんて、プログラマとして失格です。ただ、ネットの情報だと、「どこだっけー」ってのがよくあるので、ネットの情報が「物」になってる事に価値を見い出せるなら買ってもいいかと。もう一回言います。「ネットの情報」

・録音機能について
https://github.com/codeboxed/audioRecorder-Android-Titanium-Module
何も言わずこれを使うべし。

スマートフォン内のファイルをPOSTで送信する方法
これが一番はまったんだぜ。こんな事くらい解説して欲しい上に、結構これって海外の公式サイトでも質問に上がりまくってる上に、解決策が無かったりする。みんなiphone用しか作ってないのねー。
あと、まだ試してないけど、写真を撮ったイベントで送信するってパターンのソースは多いんですw
そうじゃねぇんだよ、普通にファイルをPOSTしたいんだよ、という人向け。
というわけで、結構革新的(と思ってる)方法でPOSTしました。こうすればOKだよ〜。

○SDカードの一番上のフォルダを取得する方法

var myAppDir = Ti.Filesystem.getFile(Ti.Filesystem.externalStorageDirectory);
var sdcardDir = myAppDir.getParent();

getParentがミソ。これ公式にも書いてないらしいよー。

○ファイルの取得方法
getFileだけじゃダメな場合はこうしてみるべし。

var file = Ti.Filesystem.getFile(sdcardDir.nativePath,'filename.mp3');

○xhr.sendの中身

mp3 : Titanium.Utils.base64encode(file .read()).toString()

色々試しましたが、xhr.sendの中ではbase64endcodeで送れば上手くいきます。
その際に「read()」を使うべし。もうね、たどり着くのに3日かかったわw
base64encodeやらないで送信してるソースがいくつかあったけど、ホントに動いてるのか?
iphoneだったらできそうなんだけどなぁ。Titaniumはiphone用ソースなのか、android用ソースなのか、はっきり書いて欲しいです…。あ、僕が書いてるのは今のところ全部andoroidソースですよー。

これでアンドロイドでTitaniumでファイル送信できるよー。

Titaniumでアンドロイドアプリは評判悪いです。お気をつけをー。