前回は開発環境についての解説で終わってしまいましたが、
Intentとは
Androidではアプリ間の連携のためにIntentという仕組みが用意されています。正確にはアプリ内でもWindow
では、
var win = Ti.UI.currentWindow;
var button1 = Ti.UI.createButton({
width: '100dp',
heigth: '50dp',
top: '30dp',
left: '10dp',
title: 'ACTION_SEND'
})
button1.addEventListener(
'click',
function(){
var intent = Ti.Android.createIntent({
action: Ti.Android.ACTION_SEND,
type: 'text/plain',
data:'hogehuga'
});
intent.addCategory(Ti.Android.CATEGORY_DEFAULT);
Ti.Android.currentActivity.startActivity(intent);
}
);
win.add(button1);
この方法でのIntentの発行では、

受け取ったデータの利用の仕方は受け取り手に任されているので、
このIntentが相手のアプリに届ける主なデータとなる部分がcreateIntentに渡っているオブジェクトのdataプロパティです。typeはこれを補助するものでMIMEタイプとほぼ同じように指定できます。そしてactionは与えられたデータをどう扱うかというもので、
対象を絞ってIntentを発行する
もちろん、
var button2 = Ti.UI.createButton({
width: '100dp',
heigth: '50dp',
top: '90dp',
left: '10dp',
title: 'QR Reader'
})
button2.addEventListener(
'click',
function(){
var intent = Ti.Android.createIntent({
action: "com.google.zxing.client.android.SCAN",
});
intent.putExtra("SCAN_MODE", "QR_CODE");
intent.putExtra("SCAN_MODE", "EAN_8");
intent.putExtra("SCAN_MODE", "EAN_13");
Ti.Android.currentActivity.startActivity(intent);
}
);
win.add(button2);
このようなコードでバーコードリーダを起動することができます。actionをここでは文字列として指定しており、
さて、
button2.addEventListener(
'click',
function(){
var intent = Ti.Android.createIntent({
action: "com.google.zxing.client.android.SCAN"
});
intent.putExtra("SCAN_MODE", "QR_CODE");
intent.putExtra("SCAN_MODE", "EAN_8");
intent.putExtra("SCAN_MODE", "EAN_13");
Ti.Android.currentActivity.startActivityForResult(
intent,
function(e){
var intent = e.intent;
var contents = intent.getStringExtra("SCAN_RESULT");
alert(contents);
}
);
}
);
このようにすると、
Intentを受け取る
ここまでIntentを発行する例を解説してきましたが、
Javascirptのコードはこのようになります。
var receiveIntent = Ti.Android.currentActivity.getIntent();
if (receiveIntent) {
Ti.API.debug(Ti.Android.EXTRA_TEXT);
alert(receiveIntent.getStringExtra(Ti.Android.EXTRA_TEXT));
}
このコードは、
Intentを受け取るにはコードの変更だけでなく、
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
という部分があるので、
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
</intent-filter>
と記載します。このintent-filterというものが受け取れるintentを指定しています。このような設定にしておくと、

ブラウザから作ったアプリが開けるのが確認できたでしょうか。実際にアプリを選択すると、
iPhoneで同じことをするには?
iPhoneに全く同じ機能というのは存在しませんが、
hatenabookmark:/entry?url=http%3A%2F%2Fb.hatena.ne.jp%2Fguide%2Fiphone_app2
というような少し変わったurlを開くと、
Ti.Platform.openURL('hatenabookmark:/entry?url=http%3A%2F%2Fb.hatena.ne.jp%2Fguide%2Fiphone_app2')
と書くとブラウザからこのURLを開いたのと同じように、
まとめ
Androidらしい機能の一つとしてIntentを利用したほかのアプリとの連携について説明しました。今回は何ができるかを主に解説しましたが、
また、