android hacks - hack8
DESCRIPTION
「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。http://www.oreilly.co.jp/books/9784873114569/TRANSCRIPT
ANDROIDHACKS#8 インテント入門担当:かわらたん
Twitter : @pfkawara
Blog : http://kawara-tan.blogspot.com/
23/04/12
1
この資料について• この資料は下記の本をベースに勉強会で作成した資料です。
• 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)
• この本の紹介ページが下記にあります。
• http://www.oreilly.co.jp/books/9784873114569/
23/04/12
2
アジェンダ1. インテントとは
2. インテントフィルタ
3. Hack をさらに Hack する
23/04/12
3
1. インテントとは
23/04/12
4
1. インテントとは• アクティビティやアプリケーション間でのやり取りを行うた
めの仕組み
• 自アプリケーションまたは他アプリケーションの画面遷移( アクティビティ呼び出し )
• インテントに「あーしてほしい」「こーしてほしい」と言ったお願い事を込める。
• 012-345-6789 番に電話をかけたい• 運河の地図を表示したい
• 2 種類のインテント
• 明示的インテント• 暗黙的インテント
23/04/12
5
1. インテントとは• 明示的インテント
• インテントにクラス名パッケージ名を指定してアクティビティ起動
• 暗黙的インテント
• インテントのパラメータに実行する内容等を設定し、アクティビティ起動はシステムにおまかせ
23/04/12
6
1. インテントとは• コードサンプル
23/04/12
7
Id が” Explicit” のボタンを取得
ボタンにクリックイベントリスナー登録
明示的インテントの場合は、 Intentインスタンスを用意し、パッケージ
名とクラス名 (FQCN) をセット
1. インテントとは• コードサンプル ( 続き )
23/04/12
8
暗黙的インテントの場合は、 Action のタイプと、データ
形式をセット
2. インテントフィルタ
23/04/12
9
2. インテントフィルタ• システムがインテントを受け取った際に、どのアクティビ
ティを実行するかを決定するためのフィルタ
23/04/12
10
【インテント】データを表示した
いデータ
【アクティビティ】
データを表示します
【アクティビティ】
電話をかけます
【アクティビティ】
データを削除します
【インテントフィルタ】適切なアクティビティを
選択
「データを表示したい」という要求に対して、データを表示するアクションを行うアクティビティを選択
2. インテントフィルタ• マニフェストファイルに以下の 3 つを記述することが可能
• ACTION• このアプリケーションが実行する内容
• CATEGORY• ACTION に対する追加情報
• DATA• このアプリケーションが対応するデータ属性
※標準で用意されているアクティビティアクションについては、巻末の「参考( アクティビティアクション ) 」を参照
※標準で用意されているカテゴリについては、巻末の「参考 ( カテゴリ ) 」を参照
23/04/12
11
3. Hack をさらに Hack する
23/04/12
12
3. Hack をさらに Hack する• コマンドラインからインテント投げてみよう
1.明示的• adb shell am start –n パッケージ名 /. アクティビティクラス
2.暗黙的• adb shell am start –a アクション名 – d データ
3.BroadcastIntent( 後述 )• adb shell am broadcast –a アクション名
23/04/12
13
1
2
3
3. Hack をさらに Hack する• BroadcastIntent
• システムなどが発行する情報を必要とする全てのアプリケーションに対して通知できるインテント
• インテント通知の例• 端末が起動した• システムで時刻変更された• バッテリーが少なくなってきた
• BroadcastReceiver
• BroadcastIntent を受け取るレシーバ• BroadcastReceiver クラスを継承したクラスを作成する
23/04/12
14
3. Hack をさらに Hack する• サンプル (Java)
• サンプル (ApplicationManifest.xml)
※ブロードキャストアクションについては、巻末「参考 ( ブロードキャストアクション ) 」を参照
23/04/12
15
BroadcastReceiver を継承
例では、 MainActivity を起動するためのインテント発行をしている
作成した BootReceiver のACTION 属性を
BOOT_COMPLETED にする
参考 ( アクティビティアクション )• アクティビティ起動時に指定するアクションの一覧その 1
23/04/12
16
Intent クラスの定数名 説明 実際の文字列
ACTION_MAIN アプリケーション起動時のアクションです。通常は、エントリポイントとなるアクティビティに対して設定します。
“android.intent.action.MAIN”
ACTION_VIEW データをユーザーに表示するアクションです。 “android.intent.action.VIEW”
ACTION_DEFAULT ACTION_VIEW の別名です。 “android.intent.action.VIEW”
ACTION_INSERT 空の要素を新たに作成することを示すアクションです。
“android.intent.action.INSERT”
ACTION_EDIT 与えられたデータに対して変更を加えることを示すアクションです。
“android.intent.action.EDIT”
ACTION_DELETE データを削除することを示すアクションです。 “android.intent.action.DELETE”
ACTION_ATTACH_DATA 当該データを他のデータに添付することを示すアクションです。 ( コンタクトに画像を添付するなど。 )
“android.intent.action.ATTACH_DATA”
ACTION_PICK_ACTIVITY 与えられたインテントからアクティビティを選択し、そのクラスを返すことを示すアクションです。
“android.intent.action.PICK_ACTIVITY”
参考 ( アクティビティアクション )• アクティビティ起動時に指定するアクションの一覧その 2
23/04/12
17
Intent クラスの定数名 説明 実際の文字列
ACTION_PICK データの中から一見選択し、その情報を取得するアクションです。
“android.intent.action.PICK”
ACTION_GET_CONTENT 任意の一件のデータを取得するアクションです。ACTION_PICK との違いは送信元のアクティビティが希望するデータの種類をユーザーに対して示す点です。
“android.intent.action.GET_CONTENT”
ACTION_CHOOSER ユーザーにアクティビティを選択させることを示すアクションです。
“android.intent.action.CHOOSER”
ACTION_RUN データを実行するアクション全般を指します。 “android.intent.action.RUN”
ACTION_SYNC データの同期を行うことを示すアクションです。 “android.intent.action.SYNC”
ACTION_CALL 与えられたデータを元に電話をかけるアクションです。セキュリティ上、 ACTION_DIAL のみしか許されないこともあります。
“android.intent.action.CALL”
参考 ( アクティビティアクション )• アクティビティ起動時に指定するアクションの一覧その 3
• 出典:「 Google アンドロイド Android プログラミング入門」 p.105
23/04/12
18
Intent クラスの定数名 説明 実際の文字列
ACTION_DIAL 電話をかける画面を表示するアクションです。実際に電話はかけません。
“android.intent.action.DIAL”
ACTION_SEND テキストやデータストリームを他のオブジェクトへ渡すアクションです。
“android.intent.action.SEND”
ACTION_SENDTO 与えられたデータを元にメッセージを贈るアクションです。
“android.intent.action.SENDTO”
ACTION_ANSWER 電話の呼び出しがあったときにそれをハンドルするアクションです。
“android.intent.action.ANSWER”
参考 ( ブロードキャストアクション )
• インテントがブロードキャストされるときのアクションの一覧その 1
23/04/12
19
Intent クラスの定数名 説明 実際の文字列
ACTION_BATTERY_CHANGED
充電中かどうかや、電池残量の状態が変わったときに送られるアクションです。
“android.intent.action.BATTERY_CHANGED”
ACTION_BATTERY_LOW 電池残量が残り少なくなったことを示すアクションです。
“android.intent.action.BATTERY_LOW”
ACTION_BOOT_COMPLETED
システムの起動が完了したことを示すアクションです。
“android.intent.action.BOOT_COMPLETED”
ACTION_PACKAGE_ADDED
新しいアプリケーションパッケージが追加されたことを示すアクションです。
“android.intent.action.PACKAGE_ADDED”
ACTION_PACKAGE_CHANGED
存在するアプリケーションパッケージが変更されたことを示すアクションです。
“android.intent.action.PACKAGE_CHANGED”
ACTION_PACKAGE_REMOVED
アプリケーションパッケージが削除されたことを示すアクションです。
“android.intent.action.PACKAGE_REMOVED”
参考 ( ブロードキャストアクション )
• インテントがブロードキャストされるときのアクションの一覧その 2
• 出典:「 Google アンドロイド Android プログラミング入門」 p.106
23/04/12
20
Intent クラスの定数名 説明 実際の文字列
ACTION_TIMEZONE_CHANGED
タイムゾーンが変更されたことを示すアクションです。
“android.intent.action.TIMEZONE_CHANGED”
ACTION_TIME_CHANGED
時刻がセットされたっことを示すアクションです。
“android.intent.action.TIME_SET”
ACTION_TIME_TICK 現在時刻が変わったときに、毎分送られるアクションです(このアクションに応答するには、プログラム内でのハードコーディングが必要です。マニフェストファイルでの定義はできません)。
“android.intent.action.TIME_TICK”
ACTION_HEADSET_PLUG
ハンドっセットのプラグが抜き差しされたことを示すアクションです。
“android.intent.action.HEADSET_PLUG”
参考 ( カテゴリ )
• インテントフィルタでアクションと共に使用するカテゴリの一覧
• 出典:「 Google アンドロイド Android プログラミング入門」 p.107
23/04/12
21
Intent クラスの定数名 説明 実際の文字列
CATEGORY_DEFAULT 標準のカテゴリです。 “android.intent.category.DEFAULT”
CATEGORY_BROWSABLE ブラウザから起動可能なことを示すカテゴリです。
“android.intent.category.BROWSABLE”
CATEGORY_ALTERNATIVE ユーザーが現在参照しているデータに対する代替手段を提供できることを示すカテゴリです。
“android.intent.category.ALTERNATIVE”
CATEGORY_SELECTED_ALTERNATIVE
ユーザーが選択したデータに対する代替手段を提供できることを示すカテゴリです。
“android.intent.category.SELECTED_ALTERNATIVE”
CATEGORY_HOME デバイスが起動されたときに一番最後に起動されるものであることを示すカテゴリです。
“android.intent.category.HOME”
CATEGORY_LAUNCHER トップレベルのランチャーに表示されるものであることを示すカテゴリです。
“android.intent.category.LAUNCHER”
CATEGORY_TAB TabActivity の中のタブであることを示すカテゴリです。
“android.intent.category.TAB”
参考 URL• Android Developers
• http://developer.android.com/intl/ja/index.html
23/04/12
22