IntentFilter

Intentの項で、"http~"で始まるURIを持つ暗黙的インテントを投げたら、それにブラウザが反応し、起動して、そのURIの指すWebページを表示できた・・・。
このブラウザの様に、受け側のアプリが、送る側のインテントの条件に当てはまっていれば、アプリでそのインテントを受け取ってさまざまな処理につなげることができる・・・。
この受け側の対応はIntentFilterを使って行う・・・。

IntentFilter | Android Developers

AndroidManifest.xmlに、

intent-filterタグを追加・・・。
actionは、"android.intent.action.VIEW"・・・。
URIのデータ表示アクション・・・。
categoryは、"android.intent.category.DEFAULT"・・・。
既定のカテゴリ・・・。
dataのスキーマは"http"・・・。
"http~"から始まるURIなら反応するということ・・・。

あとはMainActivity.javaで、

onCreate時にgetIntentで送られてきたintentを取得・・・。
intent.getDataでuriを取得し、Toastでそれを表示・・・。

C:\Users\bg1\Documents>adb install -r Intent_.apk
5668 KB/s (496116 bytes in 0.085s)
        pkg: /data/local/tmp/Intent_.apk
Success

C:\Users\bg1\Documents>adb install -r IntentFilter_.apk
5308 KB/s (497452 bytes in 0.091s)
        pkg: /data/local/tmp/IntentFilter_.apk
Success

C:\Users\bg1\Documents>

今回は実機で試す・・・。
以前作ったIntentプロジェクトのIntent_.apkと今回のIntentFilterプロジェクトのIntentFilter_.apkをインストールする・・・。

f:id:BG1:20160928122031p:plain

IntentFilter_とIntent_・・・。
Intent_を起動すると、

f:id:BG1:20160928122114p:plain

と表示されるので、Button1を押す・・・。

f:id:BG1:20160928122153p:plain

アプリケーションを選択するダイアログが出る・・・。

既定ブラウザであるChromeや、これまで作ってきたブラウザZincもそうだが、それに加えてIntentFilter_も表示されている・・・。
IntentFilter_がIntent_の投げたインテントに対応しているということ・・・。
IntentFilter_を選択し、

f:id:BG1:20160928122513p:plain

今回は、今回のみを押そう・・・。
(常時にしたら、httpで始まるURIのとき、ブラウザの代わりに起動してしまうのでそれはやめよう・・・。)

f:id:BG1:20160928122628p:plain

そうすると、IntentFilter_が起動し、トーストでURIが表示される・・・。

Sample/android/IntentFilter/IntentFilter/src/IntentFilter at master · bg1bgst333/Sample · GitHub