android hacks - hack8

22
ANDROID HACKS #8 イイイイイイイ イイ イイイイイ Twitter : @pfkawara Blog : http://kawara-tan.blogspot.com/ 22/06/12 1

Upload: masanori-ohkawara

Post on 24-May-2015

2.679 views

Category:

Technology


2 download

DESCRIPTION

「Android Hacks ―プロが教えるテクニック & ツール」(株式会社ブリリアントサービス 著)を教材とした勉強会でのまとめ資料です。http://www.oreilly.co.jp/books/9784873114569/

TRANSCRIPT

Page 1: Android Hacks - Hack8

ANDROIDHACKS#8 インテント入門担当:かわらたん

Twitter : @pfkawara

Blog : http://kawara-tan.blogspot.com/

23/04/12

1

Page 2: Android Hacks - Hack8

この資料について• この資料は下記の本をベースに勉強会で作成した資料です。

• 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー・ジャパン刊)

• この本の紹介ページが下記にあります。

• http://www.oreilly.co.jp/books/9784873114569/

23/04/12

2

Page 3: Android Hacks - Hack8

アジェンダ1. インテントとは

2. インテントフィルタ

3. Hack をさらに Hack する

23/04/12

3

Page 4: Android Hacks - Hack8

1. インテントとは

23/04/12

4

Page 5: Android Hacks - Hack8

1. インテントとは• アクティビティやアプリケーション間でのやり取りを行うた

めの仕組み

• 自アプリケーションまたは他アプリケーションの画面遷移( アクティビティ呼び出し )

• インテントに「あーしてほしい」「こーしてほしい」と言ったお願い事を込める。

• 012-345-6789 番に電話をかけたい• 運河の地図を表示したい

• 2 種類のインテント

• 明示的インテント• 暗黙的インテント

23/04/12

5

Page 6: Android Hacks - Hack8

1. インテントとは• 明示的インテント

• インテントにクラス名パッケージ名を指定してアクティビティ起動

• 暗黙的インテント

• インテントのパラメータに実行する内容等を設定し、アクティビティ起動はシステムにおまかせ

23/04/12

6

Page 7: Android Hacks - Hack8

1. インテントとは• コードサンプル

23/04/12

7

Id が” Explicit” のボタンを取得

ボタンにクリックイベントリスナー登録

明示的インテントの場合は、 Intentインスタンスを用意し、パッケージ

名とクラス名 (FQCN) をセット

Page 8: Android Hacks - Hack8

1. インテントとは• コードサンプル ( 続き )

23/04/12

8

暗黙的インテントの場合は、 Action のタイプと、データ

形式をセット

Page 9: Android Hacks - Hack8

2. インテントフィルタ

23/04/12

9

Page 10: Android Hacks - Hack8

2. インテントフィルタ• システムがインテントを受け取った際に、どのアクティビ

ティを実行するかを決定するためのフィルタ

23/04/12

10

【インテント】データを表示した

いデータ

【アクティビティ】

データを表示します

【アクティビティ】

電話をかけます

【アクティビティ】

データを削除します

【インテントフィルタ】適切なアクティビティを

選択

「データを表示したい」という要求に対して、データを表示するアクションを行うアクティビティを選択

Page 11: Android Hacks - Hack8

2. インテントフィルタ• マニフェストファイルに以下の 3 つを記述することが可能

• ACTION• このアプリケーションが実行する内容

• CATEGORY• ACTION に対する追加情報

• DATA• このアプリケーションが対応するデータ属性

※標準で用意されているアクティビティアクションについては、巻末の「参考( アクティビティアクション ) 」を参照

※標準で用意されているカテゴリについては、巻末の「参考 ( カテゴリ ) 」を参照

23/04/12

11

Page 12: Android Hacks - Hack8

3. Hack をさらに Hack する

23/04/12

12

Page 13: Android Hacks - Hack8

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

Page 14: Android Hacks - Hack8

3. Hack をさらに Hack する• BroadcastIntent

• システムなどが発行する情報を必要とする全てのアプリケーションに対して通知できるインテント

• インテント通知の例• 端末が起動した• システムで時刻変更された• バッテリーが少なくなってきた

• BroadcastReceiver

• BroadcastIntent を受け取るレシーバ• BroadcastReceiver クラスを継承したクラスを作成する

23/04/12

14

Page 15: Android Hacks - Hack8

3. Hack をさらに Hack する• サンプル (Java)

• サンプル (ApplicationManifest.xml)

※ブロードキャストアクションについては、巻末「参考 ( ブロードキャストアクション ) 」を参照

23/04/12

15

BroadcastReceiver を継承

例では、 MainActivity を起動するためのインテント発行をしている

作成した BootReceiver のACTION 属性を

BOOT_COMPLETED にする

Page 16: Android Hacks - Hack8

参考 ( アクティビティアクション )• アクティビティ起動時に指定するアクションの一覧その 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”

Page 17: Android Hacks - Hack8

参考 ( アクティビティアクション )• アクティビティ起動時に指定するアクションの一覧その 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”

Page 18: Android Hacks - Hack8

参考 ( アクティビティアクション )• アクティビティ起動時に指定するアクションの一覧その 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”

Page 19: Android Hacks - Hack8

参考 ( ブロードキャストアクション )

• インテントがブロードキャストされるときのアクションの一覧その 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”

Page 20: Android Hacks - Hack8

参考 ( ブロードキャストアクション )

• インテントがブロードキャストされるときのアクションの一覧その 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”

Page 21: Android Hacks - Hack8

参考 ( カテゴリ )

• インテントフィルタでアクションと共に使用するカテゴリの一覧

• 出典:「 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”

Page 22: Android Hacks - Hack8

参考 URL• Android Developers

• http://developer.android.com/intl/ja/index.html

23/04/12

22