武之新
Titaniumで死ぬほどハマる

最近TitaniumでiPhone&Androidアプリを作ってたりしますが、これが死ぬほどハマる地獄道でした。特にAndroid。iPhoneはそれなりにクセがあるけど、理解さえすればそうでもないのですが、Androidは別格です。

いまハマっているのはカメラ。ただ写真を撮って、それをアプリで使いたいだけなのに、なぜか写真を撮り終わったときのイベントハンドラが呼ばれない…。

var test_window = Ti.UI.createWindow({
    title:'test',
    backgroundColor:'#fff'
});
var tab_test = Ti.UI.createTab({
	title: "test",
	window: test_window
});
var label1 = Titanium.UI.createLabel({
	color:'#999',
	text:'I am Window 1',
	font:{fontSize:20,fontFamily:'Helvetica Neue'},
	textAlign:'center',
	width:'auto'
});

test_window.add(label1);
label1.addEventListener("click", function(e){
	
			Ti.Media.showCamera({
				saveToPhotoGallery: true,
				allowEditing: false,
				mediaTypes: [Ti.Media.MEDIA_TYPE_PHOTO],
				cancel:function(){
					Ti.API.warn("camera cancelled");
				},
				error:function(){
					Ti.API.warn("camera error");
				},
				success: function(event){
					Ti.API.warn("camera succeeded");
				}
	});
});

やっているのはこれだけ。空っぽのprojectを作って、これをapp.jsに書くと動くのだけど、実際のアプリに組み込むとsuccessもcancelもerrorも呼ばれなくなったりするのです。どうやらapp.jsなら動くというところに回避策がありそうですが、いまのところドハマリ中。

他にもドキュメントに書いてあるけど未実装だったり、ググると出てくるサンプルコードがいまの最新では動かなかったり、そもそもそのサンプルで使ってるAPIはドキュメントに書いてなかったり、まぁ、いろいろ香ばしい。まだ実戦で使うものではない気がしてきています。

  1. tekuxxhisuixからリブログしました
  2. hisuixtakemasa5からリブログしました
  3. takemasa5の投稿です