狠狠撸

狠狠撸Share a Scribd company logo
ANDROID HACKS #8  インテント入門 ( 合宿編 ) 担当:伊草 @M2 Twitter : @ginyutok 09/19/11
この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
アジェンダ インテントとは 明示的インテント 暗黙的インテント インテントフィルタ インテントフィルタの記述方法 サンプルコードの説明 Hack をさらに Hack する BroadcastIntent とは BroadcastReceiver を使う おまけ Java コード内にインテントフィルタを記述する 09/19/11
1.  インテントとは 09/19/11
1.  インテントとは アクティビティやアプリケーション間でのやりとりを行うための仕組み 自アプリケーション内での画面遷移 他アプリケーションとの連携 標準のブラウザ、メール、マップ、カメラの機能を使うとか インテントには種類がある 明示的インテント 暗黙的インテント 09/19/11
1-1.  明示的インテントとは インテントに クラス名とパッケージ名を指定 して、アクティビティを起動する方法 例 ) IntentActivity.java ( 64 ページ) ??????????????????????? 10:  public void onClick(View arg0) { 11:  Intent intent = new Intent(); 12:  intent.setClassName("com.android.browser", 13:  "com.android.browser.BrowserActivity"); 14:  startActivity(intent); 15:  } 09/19/11 インテントインスタンスの生成 起動先のパッケージとクラス名の指定 インテントを引数に渡してアクティビティを起動
1-2.  暗黙的インテントとは インテントの パラメータから推測 して、起動するアクティビティを決定する方法 例 ) IntentActivity.java ( 65 ~ 66 ページ) ??????????????????????? 19:  public void onClick(View arg0) { 20:  Url url = Url.parse(“http://www.google.co.jp”); 21:  Intent intent = new Intent();  22:  intent.setAction(Intent.ACTION_VIEW); 23:  intent.setData(url); 24:  startActivity(intent); 25:  } 09/19/11 データを表示するアクション データをインテントにセット
どう使い分ける? 自アプリ内の画面遷移は明示的インテント 他アプリを利用するときは暗黙的インテント どうしても純正アプリ使う場合は明示的インテントも OK ? 09/19/11
2.  インテントフィルタ 09/19/11
2.  インテントフィルタ Android システムがインテントを受け取った際に、 どのアクティビティを実行するかを決定する ために用いられるフィルタ 例)データを表示したい 09/19/11 インテント データ http:// ~ インテントフィルタ アクティビティ メール表示 アクティビティ Web ブラウザ アクティビティ 電話発信 ????????????
2.1  インテントフィルタの記述方法 マニフェストファイル内に <intent-filter> タグを用いて記述 ( 一般的 ) ACTION 実際に実行する内容 CATEGORY ACTION 属性をカテゴライズすることで絞り込む DATA このアプリケーションが対応するデータ プログラム内に Intent Filter クラスを使って java コードに直接記述 09/19/11
2.2  サンプルコードの説明 目的: URL を表示するだけのアクティビティ (IntentFilter) を作成し、暗黙的 INTENT ボタンを押したときにブラウザと IntentFilter を選択させるようにする 09/19/11 IntentActivity IntentFilter
2.2  サンプルコードの説明 AndroidManifest.xml ( 68 ページ) ?????????????????????????????????? 6:  <activity android:name= &quot;.IntentActivity“ android:label=&quot;@string/app_name&quot;> 7:  <intent-filter> 8:  < action  android:name= &quot;android.intent. action.MAIN &quot; /> 9:  < category android:name= &quot;android.intent. category.LAUNCHER &quot; /> 10:  </intent-filter> 11:  </activity> 09/19/11 IntentActivity についての記述 アプリ起動時に立ち上がることを示す Andorid のシステムランチャーに表示されることを示す
2.2  サンプルコードの説明 つづき ?????????????????????????????????? 12:  <activity android:name= &quot;.FilterActivity“ android:label=&quot;@string/app_name&quot;> 13:  <intent-filter> 14:  < action  android:name= &quot;android.intent. action.VIEW &quot; /> 15:  < category  android:name= &quot;android.intent. category.DEFAULT &quot; /> 16:  < category  android:name= &quot;android.intent. category.BROWSABLE &quot; /> 17:  < data  android:scheme= &quot;http&quot; /> 18:  </intent-filter> 19:  </activity> 09/19/11 FilterActivity についての記述 データを表示するアクション ブラウザから起動可能であることを示す 受け取ったデータが http であるときに起動
2.2  サンプルコードの補足 category.DEFAULT は 暗黙的インテントを受け取る場合は 必ず記述 しなくてはならない その Activity に遷移できなくなる 例外 明示的インテントを受け取る場合 ACTION.MAIN  と  Category.LAUNCHER の組み合わせ 09/19/11
3. Hack をさらに Hack する 09/19/11
3.1 BroadcastIntent とは システムが発行するインテント 例: 端末の起動?終了 バッテリー残量 電話やメールの着信 BroadcastIntent を利用したい場合、 BroadcastReceiver を実装する必要がある 09/19/11
3.2 BroadcastReceiver を使う 起動時に IntentActivity が立ち上がるようにする 起動完了を知らせる BOOT_COMPLETED アクションを受け取る BrroadcastReceiver を実装( 70 ページ) ????????????????????????????????????? 1:  public class BootReceiver extends BroadcastReceiver { 2:  @Override 3:  public void onReceive(Context context, Intent rIntent) { 4:  Intent intent=new Intent(context,IntentActivity.class); 5:  intent.addFlags(Intent. FLAG_ACTIVITY_NEW_TASK); 6:  context.startActivity(intent); 7:  } 8:  } 09/19/11 アクティビティ以外からアクティビティを起動する場合に必要
3.2 BroadcastReceiver を使う マニフェストファイルにレシーバを登録( 71 ページ) ????????????????????????????????????? <receiver android:name=&quot;.BootReceiver&quot;> <intent-filter> <action android:name=&quot;android.intent.action.BOOT_COMPLETED&quot; /> </intent-filter> </receiver> 09/19/11
おまけ 09/19/11
2.1  インテントフィルタの記述方法 マニフェストファイル内に <intent-filter> タグを用いて記述 ( 一般的 ) ACTION 実際に実行する内容 CATEGORY ACTION 属性をカテゴライズすることで絞り込む DATA このアプリケーションが対応するデータ プログラム内に Intent Filter クラスを使って java コードに直接記述 09/19/11
Java コード内での Intent Filter の書き方 ( 例 ) @IT   Android で動く携帯 Java アプリ作成入門( 7 ) 常駐アプリが作成できる Android の“サービス”とは http://www.atmarkit.co.jp/fsmart/articles/android07/android07_2.html 09/19/11
Java コード内での Intent Filter の書き方 (Main.java) 36:  private final KitchenTimerReceiver receiver = new KitchenTimerReceiver();      (略) 78:  IntentFilter filter  = new IntentFilter (KitchenTimerService. ACTION); 79:  registerReceiver (receiver, filter); 09/19/11 BroadcastReceiver を継承したクラス 指定した ACTION をフィルタとした IntentFilter インスタンスを生成 レシーバとフィルタを設定
Java コード内での Intent Filter の書き方 あとから ACTION や CATEGORY や DATA を追加できます addAction(String action) addCategory(String category) addDataS cheme (String scheme) 09/19/11
使い道は? 動的にインテントフィルタの内容を決定したい時 よっぽどのことがない限りはマニフェストファイルに書いたほうが簡単だと思われる 09/19/11
補足事項 @ pfkawara さんのパワポをコピペして枚数を稼ぐだけの 簡単なお仕事です!! 09/19/11
参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 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

Similar to Android Hacks - 合宿インテント (20)

Android Hacks - Hack8
Android Hacks - Hack8Android Hacks - Hack8
Android Hacks - Hack8
Masanori Ohkawara
?
Android Wear Apps
Android Wear AppsAndroid Wear Apps
Android Wear Apps
Teruaki Kinoshita
?
Web Intents入門
Web Intents入門Web Intents入門
Web Intents入門
Shumpei Shiraishi
?
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
Yuki Higuchi
?
はじめてのAndroid in 高知
はじめてのAndroid in 高知はじめてのAndroid in 高知
はじめてのAndroid in 高知
hiro nemu
?
冬た?から础苍诲谤辞颈诲再入门
冬た?から础苍诲谤辞颈诲再入门冬た?から础苍诲谤辞颈诲再入门
冬た?から础苍诲谤辞颈诲再入门
Katsumi Honda
?
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
ngi group.
?
学生向け础苍诲谤辞颈诲勉强会(入门编)
学生向け础苍诲谤辞颈诲勉强会(入门编)学生向け础苍诲谤辞颈诲勉强会(入门编)
学生向け础苍诲谤辞颈诲勉强会(入门编)
Itsuki Kuroda
?
础苍诲谤辞颈诲4.2彻底解剖!
础苍诲谤辞颈诲4.2彻底解剖!础苍诲谤辞颈诲4.2彻底解剖!
础苍诲谤辞颈诲4.2彻底解剖!
leverages_event
?
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniA Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Yoshifumi Kawai
?
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
Akira Tateishi
?
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
Yuki Tanabe
?
OSC2011 Androidハンズオン
OSC2011 AndroidハンズオンOSC2011 Androidハンズオン
OSC2011 Androidハンズオン
Katsumi Honda
?
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
Kazuki Nakajima
?
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
techtalkdwango
?
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
Takashi EGAWA
?
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
Nobuhiro Sue
?
はじめての础苍诲谤辞颈诲开発
はじめての础苍诲谤辞颈诲开発はじめての础苍诲谤辞颈诲开発
はじめての础苍诲谤辞颈诲开発
Katsumi Honda
?
Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.Android Lecture #01 @PRO&BSC Inc.
Android Lecture #01 @PRO&BSC Inc.
Yuki Higuchi
?
はじめてのAndroid in 高知
はじめてのAndroid in 高知はじめてのAndroid in 高知
はじめてのAndroid in 高知
hiro nemu
?
冬た?から础苍诲谤辞颈诲再入门
冬た?から础苍诲谤辞颈诲再入门冬た?から础苍诲谤辞颈诲再入门
冬た?から础苍诲谤辞颈诲再入门
Katsumi Honda
?
Mixiアプリで体験する Open Social
Mixiアプリで体験する Open SocialMixiアプリで体験する Open Social
Mixiアプリで体験する Open Social
ngi group.
?
学生向け础苍诲谤辞颈诲勉强会(入门编)
学生向け础苍诲谤辞颈诲勉强会(入门编)学生向け础苍诲谤辞颈诲勉强会(入门编)
学生向け础苍诲谤辞颈诲勉强会(入门编)
Itsuki Kuroda
?
础苍诲谤辞颈诲4.2彻底解剖!
础苍诲谤辞颈诲4.2彻底解剖!础苍诲谤辞颈诲4.2彻底解剖!
础苍诲谤辞颈诲4.2彻底解剖!
leverages_event
?
A Framework for LightUp Applications of Grani
A Framework for LightUp Applications of GraniA Framework for LightUp Applications of Grani
A Framework for LightUp Applications of Grani
Yoshifumi Kawai
?
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
JAWS-UG IoT専門支部 講演資料 IoT Analyticsによる構築事例説明
Akira Tateishi
?
iOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips までiOS 8 Widget ~ 導入から Tips まで
iOS 8 Widget ~ 導入から Tips まで
Yuki Tanabe
?
OSC2011 Androidハンズオン
OSC2011 AndroidハンズオンOSC2011 Androidハンズオン
OSC2011 Androidハンズオン
Katsumi Honda
?
Tech talk salesforce mobile sdk
Tech talk   salesforce mobile sdkTech talk   salesforce mobile sdk
Tech talk salesforce mobile sdk
Kazuki Nakajima
?
みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」みゆっき☆Think#3 「androidに触ってみるよ!」
みゆっき☆Think#3 「androidに触ってみるよ!」
techtalkdwango
?
Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010Tokyo GTUG Bootcamp2010
Tokyo GTUG Bootcamp2010
Takashi EGAWA
?
20111031 MobileWeb at TDC
20111031 MobileWeb at TDC20111031 MobileWeb at TDC
20111031 MobileWeb at TDC
Nobuhiro Sue
?
はじめての础苍诲谤辞颈诲开発
はじめての础苍诲谤辞颈诲开発はじめての础苍诲谤辞颈诲开発
はじめての础苍诲谤辞颈诲开発
Katsumi Honda
?

More from Masanori Ohkawara (15)

Android Hacks - 合宿 Service
Android Hacks - 合宿 ServiceAndroid Hacks - 合宿 Service
Android Hacks - 合宿 Service
Masanori Ohkawara
?
Android Hacks - 合宿 Activity
Android Hacks - 合宿 ActivityAndroid Hacks - 合宿 Activity
Android Hacks - 合宿 Activity
Masanori Ohkawara
?
Android Hacks - Hack59
Android Hacks - Hack59Android Hacks - Hack59
Android Hacks - Hack59
Masanori Ohkawara
?
Android Hacks - Hack57
Android Hacks - Hack57Android Hacks - Hack57
Android Hacks - Hack57
Masanori Ohkawara
?
Android Hacks - Hack47
Android Hacks - Hack47Android Hacks - Hack47
Android Hacks - Hack47
Masanori Ohkawara
?
Android Hacks - Hack40
Android Hacks - Hack40Android Hacks - Hack40
Android Hacks - Hack40
Masanori Ohkawara
?
Android Hacks - Hack32
Android Hacks - Hack32Android Hacks - Hack32
Android Hacks - Hack32
Masanori Ohkawara
?
Android Hacks - Hack31
Android Hacks - Hack31Android Hacks - Hack31
Android Hacks - Hack31
Masanori Ohkawara
?
Android Hacks - Hack30
Android Hacks - Hack30Android Hacks - Hack30
Android Hacks - Hack30
Masanori Ohkawara
?
Android Hacks - Hack27 ~ Hack29
Android Hacks - Hack27 ~ Hack29Android Hacks - Hack27 ~ Hack29
Android Hacks - Hack27 ~ Hack29
Masanori Ohkawara
?
Android Hacks - Hack26
Android Hacks - Hack26Android Hacks - Hack26
Android Hacks - Hack26
Masanori Ohkawara
?
Android Hacks - Hack21
Android Hacks - Hack21Android Hacks - Hack21
Android Hacks - Hack21
Masanori Ohkawara
?
Android Hacks - Hack18 ~ Hack20
Android Hacks - Hack18 ~ Hack20Android Hacks - Hack18 ~ Hack20
Android Hacks - Hack18 ~ Hack20
Masanori Ohkawara
?
Android Hacks - Hack12
Android Hacks - Hack12Android Hacks - Hack12
Android Hacks - Hack12
Masanori Ohkawara
?
Android Hacks - Hack11
Android Hacks - Hack11Android Hacks - Hack11
Android Hacks - Hack11
Masanori Ohkawara
?

Recently uploaded (8)

2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!
2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!
2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!
arts yokohama
?
2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー
arts yokohama
?
わたしたちのAlexaスキル開発 by 筑波技術大学スマートスピーカーアプリ開発チーム
わたしたちのAlexaスキル開発 by 筑波技術大学スマートスピーカーアプリ開発チームわたしたちのAlexaスキル開発 by 筑波技術大学スマートスピーカーアプリ開発チーム
わたしたちのAlexaスキル開発 by 筑波技術大学スマートスピーカーアプリ開発チーム
National University Cooperation, Tsukuba University of Technology
?
Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...
Atomu Hidaka
?
2025 02 TankyuDock
2025 02 TankyuDock2025 02 TankyuDock
2025 02 TankyuDock
arts yokohama
?
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
?
2025 04 Dayne
2025 04 Dayne2025 04 Dayne
2025 04 Dayne
arts yokohama
?
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
?
2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!
2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!
2025 03 世代を繋ぎ、より高质で快适な学校生活へ、1から始まるコネクタス!!
arts yokohama
?
2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー2025 01 スマート抵抗チェッカー
2025 01 スマート抵抗チェッカー
arts yokohama
?
Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...Guidance for beginners and experts on how to set up a Windows driver developm...
Guidance for beginners and experts on how to set up a Windows driver developm...
Atomu Hidaka
?
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアルLoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
LoRa/LoRaWAN 5インチタッチスクリーン LTS5 日本語ユーザーマニュアル
CRI Japan, Inc.
?
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
永島 陸, 徳丸 晴天, 畑 玲音, 松下 光範. イベントにおける地図の情報量がユーザ行動へ与える影響に関する分析, 情報処理学会研究報告, Vol.2...
Matsushita Laboratory
?

Android Hacks - 合宿インテント

  • 1. ANDROID HACKS #8 インテント入門 ( 合宿編 ) 担当:伊草 @M2 Twitter : @ginyutok 09/19/11
  • 2. この資料について この資料は下記の本をベースに勉強会で作成した資料です。 『 Android Hacks 』(株式会社ブリリアントサービス著、オライリー?ジャパン刊) この本の紹介ページが下記にあります。 http://www.oreilly.co.jp/books/9784873114569/ 09/19/11
  • 3. アジェンダ インテントとは 明示的インテント 暗黙的インテント インテントフィルタ インテントフィルタの記述方法 サンプルコードの説明 Hack をさらに Hack する BroadcastIntent とは BroadcastReceiver を使う おまけ Java コード内にインテントフィルタを記述する 09/19/11
  • 5. 1. インテントとは アクティビティやアプリケーション間でのやりとりを行うための仕組み 自アプリケーション内での画面遷移 他アプリケーションとの連携 標準のブラウザ、メール、マップ、カメラの機能を使うとか インテントには種類がある 明示的インテント 暗黙的インテント 09/19/11
  • 6. 1-1. 明示的インテントとは インテントに クラス名とパッケージ名を指定 して、アクティビティを起動する方法 例 ) IntentActivity.java ( 64 ページ) ??????????????????????? 10: public void onClick(View arg0) { 11: Intent intent = new Intent(); 12: intent.setClassName(&quot;com.android.browser&quot;, 13: &quot;com.android.browser.BrowserActivity&quot;); 14: startActivity(intent); 15: } 09/19/11 インテントインスタンスの生成 起動先のパッケージとクラス名の指定 インテントを引数に渡してアクティビティを起動
  • 7. 1-2. 暗黙的インテントとは インテントの パラメータから推測 して、起動するアクティビティを決定する方法 例 ) IntentActivity.java ( 65 ~ 66 ページ) ??????????????????????? 19: public void onClick(View arg0) { 20: Url url = Url.parse(“http://www.google.co.jp”); 21: Intent intent = new Intent(); 22: intent.setAction(Intent.ACTION_VIEW); 23: intent.setData(url); 24: startActivity(intent); 25: } 09/19/11 データを表示するアクション データをインテントにセット
  • 10. 2. インテントフィルタ Android システムがインテントを受け取った際に、 どのアクティビティを実行するかを決定する ために用いられるフィルタ 例)データを表示したい 09/19/11 インテント データ http:// ~ インテントフィルタ アクティビティ メール表示 アクティビティ Web ブラウザ アクティビティ 電話発信 ????????????
  • 11. 2.1 インテントフィルタの記述方法 マニフェストファイル内に <intent-filter> タグを用いて記述 ( 一般的 ) ACTION 実際に実行する内容 CATEGORY ACTION 属性をカテゴライズすることで絞り込む DATA このアプリケーションが対応するデータ プログラム内に Intent Filter クラスを使って java コードに直接記述 09/19/11
  • 12. 2.2 サンプルコードの説明 目的: URL を表示するだけのアクティビティ (IntentFilter) を作成し、暗黙的 INTENT ボタンを押したときにブラウザと IntentFilter を選択させるようにする 09/19/11 IntentActivity IntentFilter
  • 13. 2.2 サンプルコードの説明 AndroidManifest.xml ( 68 ページ) ?????????????????????????????????? 6: <activity android:name= &quot;.IntentActivity“ android:label=&quot;@string/app_name&quot;> 7: <intent-filter> 8: < action android:name= &quot;android.intent. action.MAIN &quot; /> 9: < category android:name= &quot;android.intent. category.LAUNCHER &quot; /> 10: </intent-filter> 11: </activity> 09/19/11 IntentActivity についての記述 アプリ起動時に立ち上がることを示す Andorid のシステムランチャーに表示されることを示す
  • 14. 2.2 サンプルコードの説明 つづき ?????????????????????????????????? 12: <activity android:name= &quot;.FilterActivity“ android:label=&quot;@string/app_name&quot;> 13: <intent-filter> 14: < action android:name= &quot;android.intent. action.VIEW &quot; /> 15: < category android:name= &quot;android.intent. category.DEFAULT &quot; /> 16: < category android:name= &quot;android.intent. category.BROWSABLE &quot; /> 17: < data android:scheme= &quot;http&quot; /> 18: </intent-filter> 19: </activity> 09/19/11 FilterActivity についての記述 データを表示するアクション ブラウザから起動可能であることを示す 受け取ったデータが http であるときに起動
  • 15. 2.2 サンプルコードの補足 category.DEFAULT は 暗黙的インテントを受け取る場合は 必ず記述 しなくてはならない その Activity に遷移できなくなる 例外 明示的インテントを受け取る場合 ACTION.MAIN と Category.LAUNCHER の組み合わせ 09/19/11
  • 16. 3. Hack をさらに Hack する 09/19/11
  • 17. 3.1 BroadcastIntent とは システムが発行するインテント 例: 端末の起動?終了 バッテリー残量 電話やメールの着信 BroadcastIntent を利用したい場合、 BroadcastReceiver を実装する必要がある 09/19/11
  • 18. 3.2 BroadcastReceiver を使う 起動時に IntentActivity が立ち上がるようにする 起動完了を知らせる BOOT_COMPLETED アクションを受け取る BrroadcastReceiver を実装( 70 ページ) ????????????????????????????????????? 1: public class BootReceiver extends BroadcastReceiver { 2: @Override 3: public void onReceive(Context context, Intent rIntent) { 4: Intent intent=new Intent(context,IntentActivity.class); 5: intent.addFlags(Intent. FLAG_ACTIVITY_NEW_TASK); 6: context.startActivity(intent); 7: } 8: } 09/19/11 アクティビティ以外からアクティビティを起動する場合に必要
  • 19. 3.2 BroadcastReceiver を使う マニフェストファイルにレシーバを登録( 71 ページ) ????????????????????????????????????? <receiver android:name=&quot;.BootReceiver&quot;> <intent-filter> <action android:name=&quot;android.intent.action.BOOT_COMPLETED&quot; /> </intent-filter> </receiver> 09/19/11
  • 21. 2.1 インテントフィルタの記述方法 マニフェストファイル内に <intent-filter> タグを用いて記述 ( 一般的 ) ACTION 実際に実行する内容 CATEGORY ACTION 属性をカテゴライズすることで絞り込む DATA このアプリケーションが対応するデータ プログラム内に Intent Filter クラスを使って java コードに直接記述 09/19/11
  • 22. Java コード内での Intent Filter の書き方 ( 例 ) @IT Android で動く携帯 Java アプリ作成入門( 7 ) 常駐アプリが作成できる Android の“サービス”とは http://www.atmarkit.co.jp/fsmart/articles/android07/android07_2.html 09/19/11
  • 23. Java コード内での Intent Filter の書き方 (Main.java) 36: private final KitchenTimerReceiver receiver = new KitchenTimerReceiver();      (略) 78: IntentFilter filter = new IntentFilter (KitchenTimerService. ACTION); 79: registerReceiver (receiver, filter); 09/19/11 BroadcastReceiver を継承したクラス 指定した ACTION をフィルタとした IntentFilter インスタンスを生成 レシーバとフィルタを設定
  • 24. Java コード内での Intent Filter の書き方 あとから ACTION や CATEGORY や DATA を追加できます addAction(String action) addCategory(String category) addDataS cheme (String scheme) 09/19/11
  • 26. 補足事項 @ pfkawara さんのパワポをコピペして枚数を稼ぐだけの 簡単なお仕事です!! 09/19/11
  • 27. 参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 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”
  • 28. 参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 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”
  • 29. 参考 ( アクティビティアクション ) アクティビティ起動時に指定するアクションの一覧その 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”
  • 30. 参考 ( ブロードキャストアクション ) インテントがブロードキャストされるときのアクションの一覧その 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”
  • 31. 参考 ( ブロードキャストアクション ) インテントがブロードキャストされるときのアクションの一覧その 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”
  • 32. 参考 ( カテゴリ ) インテントフィルタでアクションと共に使用するカテゴリの一覧 出典:「 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”
  • 33. 参考 URL Android Developers http://developer.android.com/intl/ja/index.html 09/19/11