狠狠撸

狠狠撸Share a Scribd company logo
ANDROID HACKS #8  インテント入門 担当:かわらたん Twitter : @pfkawara Blog : http://kawara-tan.blogspot.com/ 09/19/11
この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
アジェンダ インテントとは インテントフィルタ Hack をさらに Hack する 09/19/11
1.  インテントとは 09/19/11
1.  インテントとは アクティビティやアプリケーション間でのやり取りを行うための仕組み 自アプリケーションまたは他アプリケーションの画面遷移 ( アクティビティ呼び出し ) インテントに「あーしてほしい」「こーしてほしい」と言ったお願い事を込める。 012-345-6789 番に電話をかけたい 運河の地図を表示したい 2 種類のインテント 明示的インテント 暗黙的インテント 09/19/11
1.  インテントとは 明示的インテント インテントにクラス名パッケージ名を指定してアクティビティ起動 暗黙的インテント インテントのパラメータに実行する内容等を設定し、アクティビティ起動はシステムにおまかせ 09/19/11
1.  インテントとは コードサンプル 09/19/11 Id が” Explicit” のボタンを取得 ボタンにクリックイベントリスナー登録 明示的インテントの場合は、 Intent インスタンスを用意し、パッケージ名とクラス名 (FQCN) をセット
1.  インテントとは コードサンプル ( 続き ) 09/19/11 暗黙的インテントの場合は、 Action のタイプと、データ形式をセット
2.  インテントフィルタ 09/19/11
2.  インテントフィルタ システムがインテントを受け取った際に、どのアクティビティを実行するかを決定するためのフィルタ 09/19/11 【アクティビティ】 データを表示します 【アクティビティ】 電話をかけます 【アクティビティ】 データを削除します 【インテントフィルタ】 適切なアクティビティを選択 「データを表示したい」という要求に対して、データを表示するアクションを行うアクティビティを選択 【インテント】 データを表示したい データ
2.  インテントフィルタ マニフェストファイルに以下の 3 つを記述することが可能 ACTION このアプリケーションが実行する内容 CATEGORY ACTION に対する追加情報 DATA このアプリケーションが対応するデータ属性 ※ 標準で用意されているアクティビティアクションについては、巻末の「参考 ( アクティビティアクション ) 」を参照 ※ 標準で用意されているカテゴリについては、巻末の「参考 ( カテゴリ ) 」を参照 09/19/11
3. Hack をさらに Hack する 09/19/11
3. Hack をさらに Hack する コマンドラインからインテント投げてみよう 明示的 adb shell am start –n  パッケージ名 /. アクティビティクラス 暗黙的 adb shell am start –a  アクション名 – d  データ BroadcastIntent( 後述 ) adb shell am broadcast –a  アクション名 09/19/11 1 2 3
3. Hack をさらに Hack する BroadcastIntent システムなどが発行する情報を必要とする全てのアプリケーションに対して通知できるインテント インテント通知の例 端末が起動した システムで時刻変更された バッテリーが少なくなってきた BroadcastReceiver BroadcastIntent を受け取るレシーバ BroadcastReceiver クラスを継承したクラスを作成する 09/19/11
3. Hack をさらに Hack する サンプル (Java) サンプル (ApplicationManifest.xml) ※ ブロードキャストアクションについては、巻末「参考 ( ブロードキャストアクション ) 」を参照 09/19/11 BroadcastReceiver を継承 例では、 MainActivity を起動するためのインテント発行をしている 作成した BootReceiver の ACTION 属性を BOOT_COMPLETED にする
参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 1 09/19/11 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 09/19/11 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 09/19/11 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 09/19/11 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 09/19/11 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 09/19/11 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 09/19/11

More Related Content

Android Hacks - Hack8

  • 1. ANDROID HACKS #8 インテント入門 担当:かわらたん Twitter : @pfkawara Blog : http://kawara-tan.blogspot.com/ 09/19/11
  • 2. この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
  • 5. 1. インテントとは アクティビティやアプリケーション間でのやり取りを行うための仕組み 自アプリケーションまたは他アプリケーションの画面遷移 ( アクティビティ呼び出し ) インテントに「あーしてほしい」「こーしてほしい」と言ったお願い事を込める。 012-345-6789 番に電話をかけたい 運河の地図を表示したい 2 種類のインテント 明示的インテント 暗黙的インテント 09/19/11
  • 6. 1. インテントとは 明示的インテント インテントにクラス名パッケージ名を指定してアクティビティ起動 暗黙的インテント インテントのパラメータに実行する内容等を設定し、アクティビティ起動はシステムにおまかせ 09/19/11
  • 7. 1. インテントとは コードサンプル 09/19/11 Id が” Explicit” のボタンを取得 ボタンにクリックイベントリスナー登録 明示的インテントの場合は、 Intent インスタンスを用意し、パッケージ名とクラス名 (FQCN) をセット
  • 8. 1. インテントとは コードサンプル ( 続き ) 09/19/11 暗黙的インテントの場合は、 Action のタイプと、データ形式をセット
  • 10. 2. インテントフィルタ システムがインテントを受け取った際に、どのアクティビティを実行するかを決定するためのフィルタ 09/19/11 【アクティビティ】 データを表示します 【アクティビティ】 電話をかけます 【アクティビティ】 データを削除します 【インテントフィルタ】 適切なアクティビティを選択 「データを表示したい」という要求に対して、データを表示するアクションを行うアクティビティを選択 【インテント】 データを表示したい データ
  • 11. 2. インテントフィルタ マニフェストファイルに以下の 3 つを記述することが可能 ACTION このアプリケーションが実行する内容 CATEGORY ACTION に対する追加情報 DATA このアプリケーションが対応するデータ属性 ※ 標準で用意されているアクティビティアクションについては、巻末の「参考 ( アクティビティアクション ) 」を参照 ※ 標準で用意されているカテゴリについては、巻末の「参考 ( カテゴリ ) 」を参照 09/19/11
  • 12. 3. Hack をさらに Hack する 09/19/11
  • 13. 3. Hack をさらに Hack する コマンドラインからインテント投げてみよう 明示的 adb shell am start –n パッケージ名 /. アクティビティクラス 暗黙的 adb shell am start –a アクション名 – d データ BroadcastIntent( 後述 ) adb shell am broadcast –a アクション名 09/19/11 1 2 3
  • 14. 3. Hack をさらに Hack する BroadcastIntent システムなどが発行する情報を必要とする全てのアプリケーションに対して通知できるインテント インテント通知の例 端末が起動した システムで時刻変更された バッテリーが少なくなってきた BroadcastReceiver BroadcastIntent を受け取るレシーバ BroadcastReceiver クラスを継承したクラスを作成する 09/19/11
  • 15. 3. Hack をさらに Hack する サンプル (Java) サンプル (ApplicationManifest.xml) ※ ブロードキャストアクションについては、巻末「参考 ( ブロードキャストアクション ) 」を参照 09/19/11 BroadcastReceiver を継承 例では、 MainActivity を起動するためのインテント発行をしている 作成した BootReceiver の ACTION 属性を BOOT_COMPLETED にする
  • 16. 参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 1 09/19/11 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”
  • 17. 参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 2 09/19/11 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”
  • 18. 参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 3 出典:「 Google アンドロイド Android プログラミング入門」 p.105 09/19/11 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”
  • 19. 参考 ( ブロードキャストアクション ) インテントがブロードキャストされるときのアクションの一覧その 1 09/19/11 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”
  • 20. 参考 ( ブロードキャストアクション ) インテントがブロードキャストされるときのアクションの一覧その 2 出典:「 Google アンドロイド Android プログラミング入門」 p.106 09/19/11 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”
  • 21. 参考 ( カテゴリ ) インテントフィルタでアクションと共に使用するカテゴリの一覧 出典:「 Google アンドロイド Android プログラミング入門」 p.107 09/19/11 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”
  • 22. 参考 URL Android Developers http://developer.android.com/intl/ja/index.html 09/19/11