2011年9月14日水曜日

Android 標準ブラウザから Intent を受信する方法

ブラウザから自分のアプリを起動する方法を紹介します。

Android OSの最大の強み、あるいはAndroid プログラミングの最大の面白みは Intent (インテント)を利用したアプリ間の連携にあると言っても過言ではないでしょう。例えば、Androidの標準ブラウザで、[menu] - [その他] - [ページを共有]を選ぶと、メール、Twitter、その他 Facebook などのSNSのクライアントなどのリストが表示され、ブラウザで現在閲覧しているページのURLをそのアプリに渡すことができます。

開発者としては当然この仕組に乗っかってみたくなりますね。そこで今回はブラウザなどから情報を受信するアプリの作り方を書こうと思います。[ページを共有]を選ぶと、ブラウザはACTION_SENDという種類の Intent を発信します。これは受信先を特定せずにテキストなどのデータを伝える Intent です。どのアプリが受け取るか決まっていない、つまり明示的ではなく暗黙的な Intent なので受信候補のアプリのリストが表示されるわけです。
このIntentを受け取るにはAndroidManifest.xmlの内容を変更する必要があります。例えばMyActivityというActivity(アクティビティ)を呼び出してもうらうには、 AndroidManifest.xml に以下のように記述すればオーケーです。

<activity
android:name=".MyActivity"
android:label="@string/app_name">

<intent-filter>
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain" />
<action android:name="android.intent.action.SEND" />
</intent-filter>

</activity>
Android の標準ブラウザで、[menu] - [その他] - [ページを共有]を選ぶと自分のアプリが表示されるようになったと思います。これでブラウザから自分のアプリを呼び出せるようになりました。

もちろん、ブラウザ以外でも、 ACTION_SEND Intent を使って情報を共有するアプリで、「共有」などの動作を選択すれば自作のアプリが候補として表示されるはずです。

Android 標準ブラウザからURLを取得

さて、呼び出されたら何らかの仕事をしなくてはなりませんね。IntentにはExtraという付加情報がくっついています。ブラウザの場合は開いているウェブページのURLのデータが格納されています。これを取り出します。AndroidManifest.xml で指定した Activity に以下のように記述します。

if(Intent.ACTION_SEND.equals(getIntent().getAction())){

    String url = getIntent().getExtras().getCharSequence(Intent.EXTRA_TEXT).toString();

}
以上のようなコードでブラウザが開いているURLを文字列として取得できます。あとは煮るなり焼くなり好きに処理してください。

0 件のコメント:

コメントを投稿