[Android]暗黙的インテントを受け取る | 妄想プログラマのらくがき帳

2013年2月25日月曜日

[Android]暗黙的インテントを受け取る

前回のエントリでは、暗黙的インテントを使って他アプリを起動する方法について書きました。
今回は暗黙的インテントを受け取る側(起動される側)についてです。

暗黙的インテントを受け取れるようにするには、マニフェストファイルにインテントフィルタを追加します。
インテントフィルタとは、処理できる暗黙的インテントの種類をシステムに伝えるためのものです。
<activity    
    android:name="com.example.allowingotherappstostartsample.MainActivity"
    android:label="@string/app_name" >

    <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.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="http" />
    </intent-filter>
    
</activity>
1個目のインテントフィルタは、EclipseでAndroidプロジェクトを新規作成したときに
自動生成されるマニフェストファイルに記述されているものです。
親タグのactivityがアプリのエントリポイントであることを示すandroid.intent.action.MAINと、
ランチャーから起動可能(であることを示すandroid.intent.category.LAUNCHERが指定されています。

2個目のインテントフィルタが今回追加したもので、下記の条件を満たす暗黙的インテントを受け取れる(処理できる)ことを表しています。

・アクションがIntent.ACTION_VIEW
・データに設定されているURIがhttp
カテゴリに指定されているcategory.DEFAULTは、暗黙的インテントを受け取るには必ず指定する必要があります
(但し、android.intent.action.MAINとandroid.intent.category.LAUNCHERを指定した場合は必須ではない)。

上記のインテントフィルタを設定したアプリを起動する側のコードは以下のようになります。
Intent browserIntent = new Intent(Intent.ACTION_VIEW);
browserIntent.setData(Uri.parse("http://www.example.com"));
startActivity(browserIntent );
このコードを実行すると、Chooserにデフォルトのブラウザに加えて受け取り側アプリが表示され、
暗黙的インテントを受け取れるようになったことが分かります。

0 件のコメント:

コメントを投稿