早稲田大学 丸山 不二夫. 1993/06 1995/06 1993 年 1994 年 1995 年 6月6月 10 月 3月3月 800K 1200K 400K インターネットの爆発.

Slides:



Advertisements
Similar presentations
オブジェクト指向 言語 論 第八回 知能情報学部 新田直也. 多相性(最も単純な例) class A { void m() { System.out.println( “ this is class A ” ); } } class A1 extends A { void m() { System.out.println(
Advertisements

独習JAVA Chapter 6 6.6 クラスの修飾子 6.7 変数の修飾子 結城 隆. 6.6 クラスの修飾 abstract インスタンス化できないクラス。1つまたは複数のサブクラスで 実装してはじめてインスタンス化できる。 final 継承されたくないことを明示する。これ以上機能拡張 / 変更でき.
8-4 Google マップの利用 1.地図を表示 ( エミュレータでも可能 ) Android API キーを取得しておくこと。 【 AndroidManifest.xml 】 ・・・
API 呼び出し列の差分を利用した Android アプリケーション比較ツールの 試作 井上研究室 神田 哲也.
アンドロイドの GUI 作成なんて怖くな い! In 第 5 回勉強会@徳島 / オープンフォース Android 勉強会 at 2010/07/15(sut) 夜子まま.
Scala + Liftフレームワーク その2.
社会人学習講座 「Javaプログラミング概論」
創造工学設計I 電子情報工学科4年(前期) 12回目 (09/07/2015) 担当 古山彰一 ac
2006年11月15日 植田龍男 Webサービス II (第8回) 年11月15日 植田龍男.
Copyright by Rich & Giro
4月卒研報告              上藤紳也.
5-4 画像の表示 (1)複数画像の表示 A.手順 (基本は5-2(1)Image View参照) ①画像ファイルをリソースに追加
Android:Service 小山 圭.
創造工学設計I 電子情報工学科4年(前期) 8回目 (04/6/2015) 担当 古山彰一 ac
英語勉強会.
Ex7. Search for Vacuum Problem
GPSはじめの第一歩 Android編 2009/03/28 山本 慎也.
プログラミング基礎I(再) 山元進.
Apache Camel Data Format Component Apache Camel
Ex8. Search for Vacuum Problem(2)
6-2 データベース 1.SQLite SQLを単純化した SQLite を使ってデータベースを操作 表「fruit」
8-2 センサ関係 1.センサの種類 種類センサの内容 TYPE_ACCELEROMETER 加速度センサ TYPE_MAGNETIC_FIELD 地磁気センサ TYPE_PROXIMITY 近接センサ TYPE_TEMPATURE 温度センサ TYPE_LIGHT 照明センサ TYPE_GRAVITY.
Iアプリプログラミング その1  鳥居秀徳.
第2回:Javaの変数と型の宣言 プログラミングII 2007年10月2日.
Object Group ANalizer Graduate School of Information Science and Technology, Osaka University OGAN visualizes representative interactions between a pair.
第20章 Flyweight ~同じものを共有して無駄をなくす~
メソッド名とその周辺の識別子の 相関ルールに基づくメソッド名変更支援手法
アルゴリズムとデータ構造 2011年6月20日
4.Eclipseの基本操作 4-1 Eclipseの起動
Chapter 4 Quiz #2 Verbs Particles を、に、で
Android SDK WG 第2回 セッション(2008/11/29) Intent
PBLソフトウェア班 ~ペイントアプリケーション開発~ 安藤 貴哉 小木曽 太紀
RMI ソフトウェア特論 第6回 /
第6回独習Javaゼミ 第6章 セクション4~6 発表者 直江 宗紀.
第13回 ハッシュテーブルを使ったプログラム ~高速に検索するには?~.
第12回 2007年7月13日 応用Java (Java/XML).
細かい粒度でコードの再利用を可能とするメソッド内メソッドのJava言語への導入
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
11.6 ランダムアクセスファイル 11.7 StreamTokenizerクラス
て みる.
JAVA入門後期⑩ 情報処理試験例題解説.
アルゴリズムとプログラミング (Algorithms and Programming)
第9章 例外処理,パッケージ 9.1 例外処理 9.2 ガーベッジコレクション.
独習JAVA 6.8 コンストラクタの修飾子 6.9 メソッドの修飾子 6.10 ObjectクラスとClassクラス 11月28日(金)
第11回 2007年7月6日 応用Java (Java/XML).
オブジェクト指向 プログラミング 第十三回 知能情報学部 新田直也.
第3回 2007年4月27日 応用Java (Java/XML).
Windows PowerShell Cmdlet
第11週:super/subクラス、継承性、メソッド再定義
オブジェクト指向 プログラミング 第十四回 知能情報学部 新田直也.
Javaプログラムの変更を支援する 影響波及解析システム
10-1 SAXの概要 10-2 Saxプログラミングの基礎 10-3 saxのプログラム例
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
アルゴリズムとデータ構造1 2005年7月5日
ソフトウェア制作論 平成30年11月21日.
Ex7. Search for Vacuum Problem
pointcut に関して高い記述力を持つ アスペクト指向言語 Josh
オブジェクト指向言語論 第十一回 知能情報学部 新田直也.
プログラミング言語論 第十三回 理工学部 情報システム工学科 新田直也.
C#プログラミング実習 第3回.
アルゴリズムとデータ構造1 2006年6月23日
アルゴリズムとデータ構造 2012年6月21日
Javaとは Javaとはオブジェクト指向言語でJava VM(Java仮想マシン)と呼ばれるプログラム上で動作します。
5-2 基本的なウィジェット (1)Toggle Button A. 配置
Indirect Speech 間接話法 Kaho.I.
7.アプリケーションの連携 7-1 インテント(intent) 1.アプリケーションの連携とは
7-3 サービスの連携 1.サービスとは 画面を持たずに処理を行う【AndroidManifest.xmlへの追加】 …
5.基本API 5-1 レイアウト ウィジェットの並べ方を指定するには、 パレットのレイアウト(Layoutでは以下の8種類)を配置する。
5-6 SurfaceView による高速描画 (1)SurfaceViewを使う A. SurfaceView とは
5-5 文字列の描画 (1)基本的な文字列描画 A.手順
Presentation transcript:

早稲田大学 丸山 不二夫

1993/ / 年 1994 年 1995 年 6月6月 10 月 3月3月 800K 1200K 400K インターネットの爆発

“You Are Here” 10^10 10^9 10^8 ‘95‘97‘99‘01‘03‘05‘07 Computer MAD (Mass Access Consumer Devices)

Log Growth Packets/sec/CPU Total packets/sec ,000 1M 2x/6-9mo 2x/18mo Y コンピュータの進化 (Moore 則 ) が を上回る。

Leonard Waverman Chair, Economics, London Business School Director, LECG January 12,

発展途上国の人々は、信じられないような スピードで、過去においてとはまったく比較になら ない速さで、新しいテクノロジーにアクセスしよう としている。 デジタル・デバイドは、急速に終焉しようと している。 その主役は、携帯電話である。 -- 世界銀行レポート 2005 年 2 月

携帯電話について云えば、アフリカが世界でもっ とも急速に成長している地域である。 2005 年の、携帯の西ヨーロッパの成長率は、 10% だったのに対して、サハラ以南の地域の成長率は、 57% に上る。 去年 2006 年では、アフリカでの新規の携帯電話へ の加入者数は、北アメリカの加入者数を上回って いる。 -- Dr.Mo Ibrahim アフリカ最大の携帯電話会社 Celtel の 創設者・会長

携帯電話は、単なるファッションのアイテム ではない。それは、「社会的な配当」を提供し、 生産性と経済成長を押し上げるのだ。 コミュニケーションのネットワークは、まず、何 よりも市場を拡大し、いい情報の流れを作り出 し、取引のコストを削減し、コストのかかるもの の移動を置き換える。 ただ、 2000 年の国連のミレニアム・レポートも コミュニケーション手段の重要性については、 見過ごしている。 経済の発展にとって、優れ たコミュニケーションのシステムは、本質的に 重要である。 -- Leonard Waverman

もしも、インドで一回の電話代が葉書よりも安く なることが出来るなら、それは、全ての家庭を 変え、全てのインド人に力を与えるだろう。 それは、成功と成長への障害物を取り除き、 社会を分断しているあらゆる障壁を廃絶する であろう。 -- Dhirubhai Ambani インド、ケララ州の漁民運動の指導者

世界には 22 億台の携帯があるが、そのうち 14 億台は、発展途上国にある。発展途上国で は、携帯は、情報にアクセスするために利用 されている。どうすれば、 Google は、それを 助けることが出来るか ? 発展途上国の携帯上で、よりよい検索手段を 提供することだ。ターゲットにすべき情報は、 まず、市場の情報である。また、仕事の情報、 社会的なネットワーク、教育についての 情報もターゲットにすべきだろう。 そして、これらの点で、 Google の Literacy Program が求められている。 -- Leonard Waverman

1. 安価で高性能な携帯電話 2. Cloud の提供するサービスの Viewer 3. 組み込みの標準的なプラットフォーム 4. パーソナルな新しいコミュニケーショ ン・メディア 5. adhoc でダイナミックな P2P ネットワーク のプラットフォーム

ユーザと相互作用する、 Android プログラ ムの基本単位。 ほとんどの Activity は、 View と呼ばれるコ ンポーネントから構成されるユーザー・イ ンターフェースを生成して、それのイベン ト処理を行う。

Android プログラミングの基本となるの は、上記三つのファイルである。

Android の開発環境

Activity の定義 View の定義 Activity と Intent の 関係の定義

リソースの 再定義 リソースの 定義

まずは、 Android での Hello World のサン プルを見てみよう。

package com.maruyama.mysamples; import android.app.Activity; import android.os.Bundle; import android.widget.TextView; import com.maruyama.mysamples.R; public class HelloMaruyama extends Activity { /** Called when the activity is first created. public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); } Activity を定義する Java ファイル

<LinearLayout xmlns:android= " android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text=“ Hello Maruyama" /> View を定義する res/layout/*.xml ファイル

<manifest xmlns:android= " package=" com.maruyama.mysamples"> <activity android:name="HelloMaruyama“ android:label="Hello, Activity!"> <action android:name= "android.intent.action.MAIN"/> <category android:name= "android.intent.category.LAUNCHER"/> Activity と Intent の関係を定義する AndroidManifest.xml ファイル

package com.maruyama.mysamples; public final class R { public static final class attr { } public static final class drawable { public static final int icon=0x7f020000; } public static final class id { public static final int text=0x7f050000; } public static final class layout { public static final int main=0x7f030000; } public static final class string { public static final int app_name=0x7f040000; } R.Java ファイルでは、リソースが 整数値のポインタに変換されている R.layout.main

Android プログラミングの基本となる、 上記三つのファイルに、ちょっとした変 更を加えてみよう。 それぞれの役割が、はっきりする。

<manifest xmlns:android= " package=" com.maruyama.mysamples"> <activity android:name="HelloMaruyama“ android:label="Hello, Activity!"> <action android:name= "android.intent.action.MAIN"/> <category android:name= "android.intent.category.LAUNCHER"/> AndroidManifest.xml ファイルの category 要素を削除してみる

<manifest xmlns:android= " package=" com.maruyama.mysamples"> <activity android:name="HelloMaruyama“ android:label="Hello, Activity!"> <action android:name= "android.intent.action.MAIN"/> <category android:name= "android.intent.category.LAUNCHER"/> AndroidManifest.xml ファイルの Action 要素を削除してみる

<TextView xmlns:android= android:layout_width="fill_parent" android:layout_height="fill_parent“ android:gravity="center_vertical" android:textAlign="center" android:textSize="40sp" /> Layout ファイルを変更してみる

public void onCreate(Bundle icicle) { super.onCreate(icicle); // setContentView(R.layout.main); LinearLayout layout = new LinearLayout(this); LinearLayout.LayoutParams p = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.FILL_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT); p.gravity = Gravity.CENTER_VERTICAL; TextView textView = new TextView(this); textView.setAlignment( Alignment.ALIGN_CENTER); textView.setTextSize( TypedValue.COMPLEX_UNIT_SP,40); textView.setText("Hello Maruyama!" ); layout.addView(textView,p); setContentView(layout); } Java ファイルを 変更してみる

Layout ファイルの 参照なしで動く

Android プログラミングでは、 Activity クラス の中で、 Activity が呼ばれる場合がある。 この時には、 startSubActivity というメソッド を利用する。呼び出された Activity の結果は、 onActivityResult メソッドで取得できる。

 void startActivity(Intent intent)  void startSubActivity(Intent intent, int requestCode)  void startActivityFromChild( Activity child, Intent intent, int requestCode)  boolean startSubActivityIfNeeded( Intent intent, int requestCode)

public class Notepadv2 extends ListActivity { ….. private void createNote() { Intent i = new Intent(this, NoteEdit.class); startSubActivity(i, ACTIVITY_CREATE); } …… protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) { …… switch(requestCode) { case ACTIVITY_CREATE: ….. } SubActivity として、 NoteEdit.class が呼び出され、 終了後、その結果は onActivityResult で取得される。 リクエスト・コード

public class Notepadv2 extends ListActivity { ….. protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Cursor c = mNotesCursor; c.moveTo(position); Intent i = new Intent(this, NoteEdit.class); i.putExtra(NotesDbAdapter.KEY_ROWID, id); i.putExtra(NotesDbAdapter.KEY_TITLE, c.getString( c.getColumnIndex(NotesDbAdapter.KEY_TITLE))); i.putExtra(NotesDbAdapter.KEY_BODY, c.getString( c.getColumnIndex(NotesDbAdapter.KEY_BODY))); startSubActivity(i, ACTIVITY_EDIT); } SubActivity として、 NoteEdit.class が呼び出され、 その時渡される Intent に、情報がセットされる。

public class NoteEdit extends Activity { ….. public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putString(NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString()); bundle.putString(NotesDbAdapter.KEY_BODY, mBodyText.getText().toString()); if (mRowId != null) { bundle.putLong(NotesDbAdapter.KEY_ROWID, mRowId); } setResult(RESULT_OK, null, bundle); finish(); } setResult で、 SubActivity の処理結果を設定し、 Finish で、 SubActivity を終了する。 setResult の 引数は、 onActivityResult の引数に対応している。

Android のプログラミングは、基本的には、 Event Driven なスタイルで行われる。 Android SDK で提供されている、 NotePadv2 サンプルを例にして、制御の流 れを追ってみよう。

public boolean onCreateOptionsMenu( Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, INSERT_ID, R.string.menu_insert); menu.add(0, DELETE_ID, R.string.menu_delete); return true; } public boolean onMenuItemSelected( int featureId, Item item) { switch(item.getId()) { case INSERT_ID: createNote(); return true; case DELETE_ID: mDbHelper.deleteNote(getListView(). getSelectedItemId()); fillData(); return true; } return super.onMenuItemSelected( FeatureId, item); }

private void createNote() { Intent i = new Intent(this, NoteEdit.class); startSubActivity(i, ACTIVITY_CREATE); } protected void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.note_edit); …….. confirmButton.setOnClickListener( new View.OnClickListener() { public void onClick(View view) { ……. setResult(RESULT_OK, null, bundle); finish(); } }); インスタンスの生成イベント イベント・リスナーの設定

public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putString( NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString()); bundle.putString( NotesDbAdapter.KEY_BODY, mBodyText.getText().toString()); if (mRowId != null) { bundle.putLong( NotesDbAdapter.KEY_ROWID, mRowId); } setResult(RESULT_OK, null, bundle); finish(); } SubActivity の終了処理

protected void onActivityResult( Int requestCode, int resultCode, String data, Bundle extras) { super.onActivityResult( requestCode, resultCode, data, extras); switch(requestCode) { case ACTIVITY_CREATE: ……. fillData(); break; case ACTIVITY_EDIT: Long rowId = extras.getLong( NotesDbAdapter.KEY_ROWID); ……. fillData(); break; }

protected void onListItemClick( ListView l, View v, int position, long id) { super.onListItemClick( l, v, position, id); Cursor c = mNotesCursor; c.moveTo(position); Intent i = new Intent(this, NoteEdit.class); i.putExtra( NotesDbAdapter.KEY_ROWID, id); …….. startSubActivity(i, ACTIVITY_EDIT); } SubActivity の開始

public void onClick(View view) { Bundle bundle = new Bundle(); bundle.putString( NotesDbAdapter.KEY_TITLE, mTitleText.getText().toString()); bundle.putString( NotesDbAdapter.KEY_BODY, mBodyText.getText().toString()); if (mRowId != null) { bundle.putLong( NotesDbAdapter.KEY_ROWID, mRowId); } setResult(RESULT_OK, null, bundle); finish(); } SubActivity の終了処理 不二夫

protected void onActivityResult( Int requestCode, int resultCode, String data, Bundle extras) { super.onActivityResult( requestCode, resultCode, data, extras); switch(requestCode) { case ACTIVITY_CREATE: ……. fillData(); break; case ACTIVITY_EDIT: Long rowId = extras.getLong( NotesDbAdapter.KEY_ROWID); ……. fillData(); break; }

Activity は、 Life Cycle を持つ。 今回は、 Activity のインスタンス生成時に呼 び出される onCreate メソッドしか扱わなかっ たが、次回は、 Android SDK で提供されてい る、 NotePadv3 サンプルを例にして、 Activity のライフサイクルを解説する。

onCreate() onStart() onRestart() onResume() onFreeze() onPause() onStop() onDestroy() RunningKill Start Shutdown 別の Activity の起動 ForeGround に Memory 不足 ?

public class Activity extends ApplicationContext { protected void onCreate(Bundle icicle); protected void onStart(); protected void onRestart(); protected void onResume(); protected void onFreeze(Bundle outIcicle); protected void onPause(); protected void onStop(); protected void onDestroy(); } Activity の Life Cycle イベントで 呼び出されるメソッド達

Intent は、 Activity で実行されるべき オペレーションの抽象的な記述である。 Intent は、 SubActivity の呼び出しに用 いられ、画面の遷移を引き起こす。 典型的には、 Intent は、 Action と、 URI で指定される Data のペアである。

 VIEW_ACTION content://contacts/1 contacts リストの 1 番目の人を表示  EDIT_ACTION content://contacts/23 contacts リストの 23 番目の人を編集  VIEW_ACTION content://contacts/ contacts リスト全体を表示  PICK_ACTION content://contacts/ contacts リスト全体からピックアップ Action と Content URI

public class MyActivity extends Activity { static final int PICK_CONTACT_REQUEST = 0; protected boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { // センターキーが押されたら、コンタクトをピックアップする. startSubActivity( new Intent ( Intent.PICK_ACTION, new Uri( “ content://contacts ” )), PICK_CONTACT_REQUEST); return true; } return false; } protected void onActivityResult(int requestCode, int resultCode, String data, Bundle extras) { if (requestCode == PICK_CONTACT_REQUEST) { if (resultCode == RESULT_OK) { // コンタクトをピックしたら、表示する startActivity( new Intent ( Intent.VIEW_ACTION, data)); } } StartActivity(Intent) Intent<--- Action, Data

 Intent()  Intent(Intent o)  Intent(String action)  Intent(String action, Uri uri)  Intent(Context packageContext, Class cls)  Intent(String action, Uri uri, Context packageContext, Class cls)

 action=android.app.action.MAIN  action=android.app.action.MAIN, category=android.app.category.LAUNCHER  action=android.app.action.VIEW, data=content://com.google.provider.NotePad/notes  action=android.app.action.PICK, data=content://com.google.provider.NotePad/notes  action=android.app.action.GET_CONTENT, type=vnd.android.cursor.item/vnd.google.note

 category – 実行されるべきアクションについて追加 的な情報を与える。  type – Intent データの型 (MIME type) を明示的に指 定する。通常は、型はデータ自身から推論されるの だが、この属性を設定することで、この評価を無効 にして、明示的に型を強制する。  component – Intent で利用されるコンポーネントの クラスを名前を、明示的に指定する。  extras – 任意の追加情報の Bundle 。 Bundle

 Explicit Intents setComponent(ComponentName) あるいは setClass(Context, Class) を通じて、実行されるべ き正確なクラスを、コンポーネントとして指定す る。アプリケーションの内部で呼び出される、他 の情報を含む必要のないアクティビティの起動に よく利用される。  Implicit Intents コンポーネントを指定しない。その代わりに、こ の Intent にとって、どの利用可能なコンポーネント を実行するのがベストかを、システムが決定する のに十分な情報を含んでいなければならない。

Intent Filter は、ある Activity がハンドル 可能な Intent を記述する。 Intent Filter は、 AndroidManifest.xml ファイルで定義・公開されねばならない。

<activity android:name=".Notepadv1" <category android:name= "android.intent.category.LAUNCHER" /> AndroidManifest.xml の記述の一部 それぞれの Activity について、 Intent Filter の記述がある。

<activity class=".NotesList" … <category android:value= "android.intent.category.DEFAULT" /> <type android:value= "vnd.android.cursor.dir/vnd.google.note" /> …

Action/Data で、 Intent を構成して、 Activity を起動するスタイルは、非常に強 力で、プログラムも大幅に簡略化される。 Data 部分の、 Content URI は、 Android プ ログラミングの基本要素である。これにつ いては、別の機会に解説する。ここでは、 いくつかのサンプルを紹介する。

public void onCreate(Bundle icicle) { super.onCreate(icicle); // setContentView(R.layout.main); Intent myintent = new Intent( Intent.PICK_ACTION, Uri.parse("content://contacts/people")); startSubActivity(myintent); }

public void onCreate(Bundle icicle) { super.onCreate(icicle); // setContentView(R.layout.main); Intent myintent = new Intent( Intent.EDIT_ACTION, Uri.parse("content://contacts/people/1")); startSubActivity(myintent); }

button.setOnClickListener(new Button.OnClickListener() { public void onClick(View v) { try { String address = addressfield.getText().toString(); address = address.replace(' ', '+'); Intent myIntent = new Intent( android.content.Intent.VIEW_ACTION, Uri.parse("geo:0,0?q=" + address)); startActivity(myIntent); } catch (Exception e) { showAlert("failed to launch",0,e.getMessage(),"OK",false); } }); }

public class showWeb extends Activity { /** Called when the activity is first created. public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Intent myintent = new Intent( Intent.WEB_SEARCH_ACTION, Uri.parse(" startActivity(myintent); }

private void createNote() { Intent i = new Intent(this, NoteEdit.class); startSubActivity(i, ACTIVITY_CREATE); protected void onListItemClick(ListView l, View v, int position, long id) { super.onListItemClick(l, v, position, id); Intent i = new Intent(this, NoteEdit.class); i.putExtra(NotesDbAdapter.KEY_ROWID, id); startSubActivity(i, ACTIVITY_EDIT); }

MAIN_ACTION = "android.intent.action.MAIN"; VIEW_ACTION = "android.intent.action.VIEW"; DEFAULT_ACTION = "android.intent.action.VIEW"; EDIT_ACTION = "android.intent.action.EDIT"; PICK_ACTION = "android.intent.action.PICK"; GET_CONTENT_ACTION = "android.intent.action.GET_CONTENT"; DIAL_ACTION = "android.intent.action.DIAL"; CALL_ACTION = "android.intent.action.CALL"; EMERGENCY_DIAL_ACTION = "android.intent.action.EMERGENCY_DIAL"; SENDTO_ACTION = "android.intent.action.SENDTO"; SEND_ACTION = "android.intent.action.SEND"; ANSWER_ACTION = "android.intent.action.ANSWER"; INSERT_ACTION = "android.intent.action.INSERT"; DELETE_ACTION = "android.intent.action.DELETE"; RUN_ACTION = "android.intent.action.RUN"; SYNC_ACTION = "android.intent.action.SYNC"; PICK_ACTIVITY_ACTION = "android.intent.action.PICK_ACTIVITY"; ADD_SHORTCUT_ACTION = "android.intent.action.ADD_SHORTCUT"; SEARCH_ACTION = "android.intent.action.SEARCH"; WEB_SEARCH_ACTION = "android.intent.action.WEB_SEARCH"; ALL_APPS_ACTION = "android.intent.action.ALL_APPS"; SETTINGS_ACTION = "android.intent.action.SETTINGS"; WALLPAPER_SETTINGS_ACTION = "android.intent.action.WALLPAPER_SETTINGS";

BUG_REPORT_ACTION = "android.intent.action.BUG_REPORT"; FACTORY_TEST_ACTION = "android.intent.action.FACTORY_TEST"; SCREEN_OFF_ACTION = "android.intent.action.SCREEN_OFF"; SCREEN_ON_ACTION = "android.intent.action.SCREEN_ON"; TIME_TICK_ACTION = "android.intent.action.TIME_TICK"; TIME_CHANGED_ACTION = "android.intent.action.TIME_SET"; DATE_CHANGED_ACTION = "android.intent.action.DATE_CHANGED"; TIMEZONE_CHANGED_ACTION = "android.intent.action.TIMEZONE_CHANGED"; BOOT_COMPLETED_ACTION = "android.intent.action.BOOT_COMPLETED"; PACKAGE_INSTALL_ACTION = "android.intent.action.PACKAGE_INSTALL"; PACKAGE_ADDED_ACTION = "android.intent.action.PACKAGE_ADDED"; PACKAGE_REMOVED_ACTION = "android.intent.action.PACKAGE_REMOVED"; PACKAGE_CHANGED_ACTION = "android.intent.action.PACKAGE_CHANGED"; WALLPAPER_CHANGED_ACTION = "android.intent.action.WALLPAPER_CHANGED"; CONFIGURATION_CHANGED_ACTION = "android.intent.action.CONFIGURATION_CHANGED"; BATTERY_CHANGED_ACTION = "android.intent.action.BATTERY_CHANGED"; UMS_CONNECTED_ACTION = "android.intent.action.UMS_CONNECTED"; UMS_DISCONNECTED_ACTION = "android.intent.action.UMS_DISCONNECTED"; MEDIA_REMOVED_ACTION = "android.intent.action.MEDIA_REMOVED"; MEDIA_UNMOUNTED_ACTION = "android.intent.action.MEDIA_UNMOUNTED"; MEDIA_MOUNTED_ACTION = "android.intent.action.MEDIA_MOUNTED"; MEDIA_SHARED_ACTION = "android.intent.action.MEDIA_SHARED";

MEDIA_BAD_REMOVAL_ACTION = "android.intent.action.MEDIA_BAD_REMOVAL"; MEDIA_EJECT_ACTION = "android.intent.action.MEDIA_EJECT"; MEDIA_SCANNER_STARTED_ACTION = "android.intent.action.MEDIA_SCANNER_STARTED"; MEDIA_SCANNER_FINISHED_ACTION = “android.intent.action.MEDIA_SCANNER_FINISHED"; MEDIA_BUTTON_ACTION = "android.intent.action.MEDIA_BUTTON"; CAMERA_BUTTON_ACTION = "android.intent.action.CAMERA_BUTTON"; GTALK_SERVICE_CONNECTED_ACTION = "android.intent.action.GTALK_CONNECTED"; GTALK_SERVICE_DISCONNECTED_ACTION = "android.intent.action.GTALK_DISCONNECTED"; NETWORK_TICKLE_RECEIVED_ACTION = "android.intent.action.NETWORK_TICKLE_RECEIVED"; PHONE_STATE_CHANGED_ACTION = "android.intent.action.PHONE_STATE"; SERVICE_STATE_CHANGED_ACTION = "android.intent.action.SERVICE_STATE"; SIGNAL_STRENGTH_CHANGED_ACTION = "android.intent.action.SIG_STR"; MESSAGE_WAITING_STATE_CHANGED_ACTION = "android.intent.action.MWI"; CALL_FORWARDING_STATE_CHANGED_ACTION = "android.intent.action.CFF"; DATA_CONNECTION_STATE_CHANGED_ACTION = "android.intent.action.DATA_STATE"; DATA_ACTIVITY_STATE_CHANGED_ACTION = “android.intent.action.DATA_ACTIVITY";

SIM_STATE_CHANGED_ACTION = "android.intent.action.SIM_STATE_CHANGED"; PHONE_INTERFACE_ADDED_ACTION = "android.intent.action.PHONE_INTERFACE_ADDED"; FOTA_UPDATE_ACTION = "android.server.checkin.FOTA_UPDATE"; FOTA_RESTART_ACTION = "android.server.checkin.FOTA_RESTART"; FOTA_READY_ACTION = "android.server.checkin.FOTA_READY"; FOTA_INSTALL_ACTION = "android.server.checkin.FOTA_INSTALL"; FOTA_CANCEL_ACTION = "android.server.checkin.FOTA_CANCEL"; PROVIDER_CHANGED_ACTION = "android.intent.action.PROVIDER_CHANGED"; PROVISIONING_CHECK_ACTION = "android.intent.action.PROVISIONING_CHECK"; DEFAULT_CATEGORY = "android.intent.category.DEFAULT"; BROWSABLE_CATEGORY = "android.intent.category.BROWSABLE"; ALTERNATIVE_CATEGORY = "android.intent.category.ALTERNATIVE"; SELECTED_ALTERNATIVE_CATEGORY = “android.intent.category.SELECTED_ALTERNATIVE"; TAB_CATEGORY = "android.intent.category.TAB"; GADGET_CATEGORY = "android.intent.category.GADGET"; WALLPAPER_CATEGORY = "android.intent.category.WALLPAPER"; LAUNCHER_CATEGORY = "android.intent.category.LAUNCHER"; HOME_CATEGORY = "android.intent.category.HOME"; PREFERENCE_CATEGORY = "android.intent.category.PREFERENCE"; DEVELOPMENT_PREFERENCE_CATEGORY = "android.intent.category.DEVELOPMENT_PREFERENCE";

EMBED_CATEGORY = "android.intent.category.EMBED"; TEST_CATEGORY = "android.intent.category.TEST"; UNIT_TEST_CATEGORY = "android.intent.category.UNIT_TEST"; SAMPLE_CODE_CATEGORY = "android.intent.category.SAMPLE_CODE"; OPENABLE_CATEGORY = "android.intent.category.OPENABLE"; FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY = "android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST"; TEMPLATE_EXTRA = "android.intent.extra.TEMPLATE"; TEXT_EXTRA = "android.intent.extra.TEXT"; STREAM_EXTRA = "android.intent.extra.STREAM"; INTENT_EXTRA = "android.intent.extra.INTENT"; LABEL_EXTRA = "android.intent.extra.LABEL"; KEY_EVENT_EXTRA = "android.intent.extra.KEY_EVENT";

private void loadApps() { Intent mainIntent = new Intent(Intent.MAIN_ACTION, null); mainIntent.addCategory(Intent.LAUNCHER_CATEGORY); mApps = getPackageManager().queryIntentActivities(mainIntent, 0); } public class AppsAdapter extends BaseAdapter { public View getView(int position, View convertView, ViewGroup parent) { ImageView i = new ImageView(Grid1.this); ResolveInfo info = mApps.get(position); i.setImageDrawable(info.activityInfo.loadIcon(getPackageManager())); i.setScaleType(ImageView.ScaleType.FIT_CENTER); i.setLayoutParams(new Gallery.LayoutParams(50, 50)); return i; }

public void onCreate(Bundle icicle) { super.onCreate(icicle); Intent intent = getIntent(); String path = intent.getStringExtra("com.google.android.samples.Path"); if (path == null) { path = ""; } setListAdapter(new SimpleAdapter(this, getData(path), android.R.layout.simple_list_item_1, new String[] { "title" }, new int[] { android.R.id.text1 })); }

protected List getData(String prefix) { List myData = new ArrayList (); Intent mainIntent = new Intent(Intent.MAIN_ACTION, null); mainIntent.addCategory(Intent.SAMPLE_CODE_CATEGORY); PackageManager pm = getPackageManager(); List list = pm.queryIntentActivities(mainIntent, 0); ….. int len = list.size(); Map entries = new HashMap (); for (int i = 0; i < len; i++) { ResolveInfo info = list.get(i); CharSequence labelSeq = info.loadLabel(pm); String label = labelSeq != null ? labelSeq.toString() : info.activityInfo.name; …….

private OnClickListener mStopRepeatingListener = new OnClickListener() { public void onClick(View v) { // Create the same intent that was scheduled. Intent intent = new Intent(AlarmController.this, RepeatingAlarm.class); // And cancel the alarm. AlarmManager am = (AlarmManager)getSystemService( ALARM_SERVICE); am.cancel(intent);

public void onStart() { // First start the activity we are instrumenting – // the contacts list. Intent intent = new Intent(Intent.MAIN_ACTION); intent.setLaunchFlags(Intent.NEW_TASK_LAUNCH); intent.setClassName(getTargetContext(), "com.google.android.phone.Dialer"); Activity activity = startActivitySync(intent);

// Here we start the next activity, and then call finish() private OnClickListener mGoListener = new OnClickListener() { public void onClick(View v) { // so that our own will stop running and be removed from the // history stack. Intent intent = new Intent(); intent.setClass(Forwarding.this, ForwardTarget.class); startActivity(intent); finish(); } };

private void bindGTalkService() { bindService((new Intent()).setComponent( com.google.android.gtalkservice.GTalkServiceConsta nts.GTALK_SERVICE_COMPONENT), mConnection, 0); } private Intent getIntentToSend() { Intent intent = new Intent(GTalkDataMessageReceiver.ACTION); intent.putExtra("poke", "Hi, I am Sam."); intent.putExtra("question", "would you like to eat green eggs and ham?"); return intent; }

public void onStart() { // First start the activity we are instrumenting -- the save/restore // state sample, which has a nice edit text into which we can write // text. Intent intent = new Intent(Intent.MAIN_ACTION); intent.addLaunchFlags(Intent.NEW_TASK_LAUNCH); intent.setClass(getTargetContext(), SaveRestoreState.class); SaveRestoreState activity = (SaveRestoreState)startActivitySync(intent); // This is the Activity object that was started, to do with as we want. Log.i("LocalSampleInstrumentation", "Initial text: " + activity.getSavedText()); // Clear the text so we start fresh. runOnMainSync(new ActivityRunnable(activity) { public void run() { ((SaveRestoreState)activity).setSavedText(""); } });

private OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { // Make sure the service is started. It will continue running // until someone calls stopService(). The Intent we use to find // the service explicitly specifies our service component, because // we want it running in our own process and don't want other // applications to replace it. startService(new Intent(LocalServiceController.this, LocalService.class), null); } };

private OnClickListener mStopListener = new OnClickListener() { public void onClick(View v) { // Cancel a previous call to startService(). Note that the // service will not actually stop at this point if there are // still bound clients. stopService(new Intent(LocalServiceController.this, LocalService.class)); } }; }

private OnClickListener mStartListener = new OnClickListener() { public void onClick(View v) { startService(new Intent(NotifyingController.this, NotifyingService.class), null); } }; private OnClickListener mStopListener = new OnClickListener() { public void onClick(View v) { stopService(new Intent(NotifyingController.this, NotifyingService.class)); } };