60
3. Google Android アプリケーション入門 目次 1.実験の目的............................................................................. 46 第1部 JAVA............................................................................. 47 2.JAVA のオブジェクト指向について ....................................................... 47 _変数と演算子........................................................................... 52 _配列の作成............................................................................ 55 _オブジェクト指向導入 .................................................................. 56 _クラスへの道........................................................................... 60 _例外と例外処理......................................................................... 71 _パッケージ............................................................................. 72 第2部 Google Android 開発入門 ~Java による携帯アプリ開発~ .............................. 73 3.Google Android とは .................................................................. 73 _開発環境 .............................................................................. 76 4.Android アプリケーション入門........................................................... 76 _エミュレーターを動かす................................................................. 77 _実機にて動作を確認する................................................................. 79 _サンプルを取り込み動作を確認する ....................................................... 79 _ドキュメントを参照する................................................................. 79 _基本構造を理解する..................................................................... 81 _コンポーネントを利用する............................................................... 84 5.複数の Activity 間を遷移するアプリケーション............................................. 87 6.インターネットと HTML の利用............................................................ 97 付録:26 号館のソフト利用時の画面(英語で表示されることが多いので注意) ..................... 101 注意: 実験時には,必ず各自の USB メモリを持参すること 45

3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

3. Google Android アプリケーション入門

目次 1.実験の目的............................................................................. 46

第1部 JAVA............................................................................. 47 2.JAVAのオブジェクト指向について....................................................... 47 _変数と演算子........................................................................... 52 _配列の作成............................................................................ 55 _オブジェクト指向導入.................................................................. 56 _クラスへの道........................................................................... 60 _例外と例外処理......................................................................... 71 _パッケージ............................................................................. 72

第2部 Google Android開発入門 ~Javaによる携帯アプリ開発~.............................. 73 3.Google Androidとは.................................................................. 73 _開発環境.............................................................................. 76 4.Androidアプリケーション入門........................................................... 76 _エミュレーターを動かす................................................................. 77 _実機にて動作を確認する................................................................. 79 _サンプルを取り込み動作を確認する....................................................... 79 _ドキュメントを参照する................................................................. 79 _基本構造を理解する..................................................................... 81 _コンポーネントを利用する............................................................... 84 5.複数のActivity間を遷移するアプリケーション............................................. 87 6.インターネットとHTMLの利用............................................................ 97 付録:26号館のソフト利用時の画面(英語で表示されることが多いので注意)..................... 101

注意: 実験時には,必ず各自の USB メモリを持参すること

45

Page 2: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

1.実験の目的 この実験では、第1の目的はに JAVAよるオブジェクト指向プログラミングを理解することである。

オブジェクト指向プログラミングはC言語と異なり、クラス、継承、インターフェースなどの概念を

理解することが重要である。この実験をとおしてこれらの概念になれて、プログラムのコードを読み

オブジェクト指向のプログラムを理解できるようになってもらいたい。JAVAについては第2回目に

小テストを行う。それができなかった者は第3回目、第4回目にも小テストを行う。

携帯端末Google Android を主にエミュレーション上で動かして、携帯端末にインストールするプログ

ラムを自分で作成する実験を行う。1つのAndroidアプリケーションは複数の JAVAプログラム、XML

ファイルから構成されており、実験をとおして多くのファイルからなるシステムのファイル配置と個々の

ファイルの役割を理解することを実験の第2の目的とする。これが自分で新しいアプリケーションを開発

することにつながる。

インターネット、HTMLを利用したアプリケーションを動かすことでAndroidアプリケーションに親

しみをもってもらうことが実験の第3の目的である。(2010/8/13 記)

レポートとJAVAの小テストについて

2011年9月 首

JAVAの小テスト

JAVAの説明が終わった後で(2回目または3回目の実験のとき)、JAVAの小テストを行う。

資料など持ち込み不可で行う。問題の例は1回目の実験で渡す。小テストはそれとほぼ同じ

問題である。小テスト不合格の学生は3回目(または4回目)の実験で再テストを行う。

それで不可の学生には再々テストを行う。

レポートには以下の項目を書く

1. 実験の目的

2. Androidプログラムの基本構造について

(Androidアプリケーション入門 基本構造を理解する を参考に)

基本構造の図を書いて、それについて詳しく説明しなさい。

Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に

置かれるか。それは何の役割をしているかなど。

3. 「4章Androidアプリケーション入門」に出てくるクラス、そのメソッドについて説明しなさい。

下記のようなクラス、メソッドがある。各クラス、メソッドの役割、

そのメソッドは何クラスのメソッドか など

Activityクラス、onCreateメソッド、setContentViewメソッド

Bundle クラス、Rクラス、R.layoutクラス、Buttonクラス

FindViewByIdメソッド、R.idクラス、ClickListenerクラス、onClickメソッド

OnClickListenerメソッド、setTextメソッド

46

Page 3: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

main.xml で使用されているクラス

LinearLayoutクラス、TextViewクラス

調べ方1:139ページ下段の Android DeveloperのReference に英語で書かれている

調べ方2:ネット上にいろいろ説明をしているサイトがあるので、それらを参考にする

4.2章、6章の演習の解を書く。

2章の問題

配列の作成 While文で書き換える。終了条件にlengthを使用

6章の問題

ButtonとWebViewを配置し、ボタンを押すとWebViewが切り替わるようなアプリを作成。

5. 5章の3つのActivity間を遷移するアプリケーションを作り、

以下の報告をしなさい。

(1)このアプリケーションの基本構造を図示し、説明しなさい。

(2)このActivityの任意の1画面のスクリーンショットを、報告書に載せなさい。

(3)2つのActivity間を遷移するアプリケーションと比較して、ActivityA,ActivityBで変更し

た部分のプログラムを書きなさい。例えば「ActivityAの???メソッドに以下の行を追加」

という形でよい。また各アクティビティのレイアウトファイルで変更した行を書きなさい。

(4)ActivityCのプログラムとレイアウトファイル(XMLファイル)とActivityAののプログラムと

レイアウトファイル(XMLファイル)を比較して、異なる部分をを書き、どうして異なっているのか

説明しなさい。

(5)(4)にともなった、strings.xmlで追加した行を書きなさい。

(6)Manifestファイルで追加した部分のみを書きなさい。

(7)可能な学生は問題3を解答しなさい。

6.実験の考察、まとめ(実験資料 4ページを参考に)を書きなさい。

第 1 部 JAVA

2.JAVA のオブジェクト指向について 以下は主に2009年の夏に行った「IT講座(飯塚著)」で使用した資料からとったものである。

2.1 Javaの歴史

Javaの誕生

Javaは1991年からサンマイクロシステム社が開発してきたプログラミング言語である。1995年

にjavaとブラウザ上で実行するアプレットが発表されると世界中の注目を浴び、爆発的に広まるこ

ととなった。

Javaの発展

Javaは今も発展しつづけている。1997年には国際化機能などを含めてバージョンは1.1になった。

その後、swingなどの機能を含めバージョン1.2となり名称もJava2となった。さらに2000年には

47

Page 4: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

バージョンは1.3となった。2002年に1.4となり、2005年からJava2 1.5と呼ぶ代わりにJava5.0

と呼ぶようになった。

Javaの優位性

Javaの優位性は大きく2つある。まず1つ目は一度ソースコードを書くとちょっとした手間

で他のOS上で実行できること、俗にいう「 Write Once, Run Anywhere」である。もう一つは

オブジェクト指向言語であるということである。Javaは当初からオブジェクト指向言語として開発され

た。このためプログラムの設計やメンテナンスを行うことが他の言語よりも容易になっている。

近の動向(Wikipediaより) Java SE 6(2006年12月11日) コードネームMustang。JSR 270のもとで開発された。

Java SE 6 においては、サンは命名方針を変更して、"J2SE" から Java SE に変更

Java SE 6 Update 10: Java SE 6 Update 10が2008年10月22日に リリースされた。

このバージョンでJavaの動作速度が改善され、アプリケーションやアプレットの起動を高速化

するJava Quick Starterが搭載され、Javaのインストールを高速化する、Java Kernelが

搭載された。

Javaの種類

Javaはハードウェアの成約から大きく分けると以下の3つに分けることができる。

JavaSE(Standard Edition)

全てのJavaの基本となるコンポーネントです。GUIアプリケーションの開発、Appletの開発

などができる。主にディスクトップ向けの機能を提供する。

JavaEE(Enterpris Edition)

サーバー向けの開発API群を提供する。ServletやJSPなどサーバーサイドアプリケーションの開

発を行うことができる。

JavaME(Micro Edition)

携帯向けの開発API群を提供する。i-アプリのような携帯電話向けの開発ができる。

(注意)WEBアプリ開発では、TomcatにJavaEEのServletや JSPなどサーバーサイドアプリケーションの開

発機能がついているので、Tomcatと JavaSE で開発を行える。

2.2 Eclipse による JAVA プログラムの開発

初めてのJavaプログラム

ここからまずはJavaの簡単なプログラムを作成してみる。以下のプログラムはJava言語

を使って「Hello World」と表示させる、もっとも簡単なJavaプログラムです。

まずは、プログラムの内容ではなく、プログラムを作成し実行するまでの手続きについて学んでい

く。プログラムはEclipseという総合開発環境を利用する。

public class HelloWorld {

public static void main (String [] args) {

System.out.println("Hello World");

}

}

手順(プロジェクトの作成)

48

Page 5: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

1 ファイルメニューから新規プロジェクトを選択

Javaプロジェクトで「次へ」を選択

2 プロジェクト名にSampleと入れて終了を押す

プロジェクトを作成することは、これから作っていくJavaのプログラムの作業場を作ったといえる。

ではこの中にJavaのプログラムを作成してみよう。Javaのプログラムはクラスという単位で構成

49

Page 6: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

される。新たなJavaプログラム=クラスを作成してみよう。

手順(ソースファイルの作成) 3 ファイルメニューから新規クラスを選択

4 クラス名にHelloWorldと入力して終了を選択

ソースコードを記述する

保管ボタンを押して保管する

実行メニューから、実行→Javaアプリケーションで実行する

/* class HelloWorld { のところはプログラムの開始部分でクラス名を宣言している*/

class HelloWorld {

/* main部分はプログラムのメイン処理の部分で、

一部の例外を除いて必ずなければならない*/

public static void main (String [] args) {

/* システムの標準出力に書き出す部分、文字列は""で囲む */

System.out.println("Hello World");

}

}

記述の決まり

ここではJava言語でプログラムを記述する際の記述の決まりについて述べる。

1.Java言語は厳格に大文字小文字を区別する。

例えば、System.out.printlnのSは大文字でなければならない。

2.ステートメントの終わりは「;」セミコロンで終わる。(C言語と同じ)

3.Javaにはプログラムに影響しないコメントと呼ばれるものがある。コメントには

50

Page 7: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

3種類の書き方がある。コメントはコンパイル時には無視される。

(1)一行コメント

//コメント

(2)ブロックコメント

/* ここから

ここまで*/

(3)ドキュメントコメント

/** ここから

ここまで */

4. 変数など名前の付け方

プログラムを記述していく際、色々な場面で名前をつける機会が起きる。Java言語では名前の

付け方に以下のような規則がある。

① 大文字と小文字を区別する(Name、NAME、naMeそれぞれ別物)

② アルファベット・数字・アンダースコアー(_)・ドルマーク($)を使える

③ 名前の先頭を数字から始めることはできない(1varなど)

④ キーワード(Eclipseで色の着く文字)を用いることはできない

(class,public,static,ifなど)

プログラムについて

型、演算子、条件と繰り返し処理 については説明を省略する。

実数型の数値は C言語と JAVAでは以下のように異なる。

デフォルトの値は、C言語は float型、JAVAは double型

C言語 float x=10.5;

double y=10.5d; //y=10.5;としても自動的に型変換する

JAVA float x=10.5f; //x=10.5;とするとエラー

double y=10.5;

51

Page 8: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

変数と演算子 Java 言語ではさまざまな処理を行うために、値を格納する器を用意しています。この器

のことを変数と呼んでいます。この変数は入れる値によっていくつかの型に分けることが

できます。またこれらの変数を利用しさまざまな演算を行う演算子というものが用意され

ています。ここからしばらくは変数と演算子について学んでいきます。

変数の型

変数の型は種類による違い(文字、整数、浮動小数点、真偽) とサイズの違いに分けるとこができま

す。

char型 ・・・2バイトのUnicode文字を格納

boolean型 ・・・true,falseを格納

byte型 ・・・1バイト符号付き整数を格納

short型 ・・・2バイト符号付き整数を格納

int型 ・・・4バイト符号付き整数を格納

long型 ・・・8バイト符号付き整数を格納

float型 ・・・4バイト符号付き浮動小数点を格納

double型 ・・・8バイト符号付き浮動小数点を格納

変数の宣言と代入

変数を利用するにはいくつかの決まりがあります。まず変数を利用する際は型と名前を

宣言しなければなりません。下記のように宣言します。

//データ型の名前 変数名;

int count;

変数の宣言は「,」カンマで区切ることにより、同時に複数宣言できます

//データ型の名前 変数名 , 変数名 , 変数名;

int count1 , count2 , count3;

宣言した変数に値を代入するには

//変数名 = 値;

52

Page 9: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

count = 0;

宣言と同時に変数に値を代入することもできます。

//データ型の名前 変数名 = 値;

int count = 0;

宣言と代入を複数にわたって行なうこともできます。

int count1 = 1 , count2 = 2 , count3 = 3;

それでは簡単な変数を利用するサンプルを作成してみましょう。

class Sample01 { public static void main (String [] args) {

//変数の宣言

char char_test;

int int_test;

double double_test;

//変数への代入

char_test = 'a';

int_test = 777;

double_test = 3.25;

//標準出力への出力

System.out.println("char型 :" + char_test);

System.out.println("int型 :" + int_test);

System.out.println("double型 :" + double_test);

}

}

class Sample02 { public static void main (String [] args) {

//変数の宣言と代入

int a = 1, b = 2, c = 3;

//標準出力への出力

System.out.println("変数 a =" + a);

System.out.println("変数 b =" + b);

System.out.println("変数 c =" + c);

}

}

53

Page 10: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

変数の代入で注意すること

変数の宣言を行なって、値を代入しないで出力を行おうとした場合はコンパイルエラー

になります。また Java では整数を int 型、小数点を double 型と認識しますので、int と

double以外の型を使うときは注意が必要です。

int count;

System.out.println("count = " + count);

long型、float型、double型は添え字をつけないとコンパイルエラーになる

float count = 3.5; //これはエラー

float count = 3.5f; //これは OK

型の値を超えるような値を代入するとコンパイルエラーとなる

int count = 12345678912; //値が大きすぎます

long count = 12345678912;//もエラー添え字Lをつける

char型はUnicode1文字を格納する、その際はシングルクォート「'」で囲む

char ch = 'A';//同じ意味

char ch = 65;//同じ意味

54

Page 11: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

配列の作成 変数をまとめて名前を付けたものを配列を呼ぶ。変数と同じように配列も宣言が必要である。配列の場

合は変数と異なり、「いくつの変数をまとめる」のかという領域の割り当てが必要になる。

配列の宣言

//データ型 [] 配列名;

int [] int_mat;

配列の領域の割り当て

//配列名 = new データ型[配列数]

int_mat = new int[10];

配列の宣言と領域の割り当てを同時に行なう場合

//データ型 配列名[] = new データ型[配列数];

int [] int_mat = new int[10];

配列生成とともにデータを格納する場合

//データ型 [] 配列名=new データ型[]{初期値1,初期値2,・・・・}

int [] int_mat = new int[]{11, 22, 33, 44};

配列の長さを取得する場合は、lengthを使う。

配列名.length

配列の練習

class Sapmle11{

public static void main(String [] args){

int [] a = new int[5];

a[0] = 1;

a[1] = 4;

a[2] = 9;

for (int i = 0; i < 3; i++) {

System.out.println("a[" + i + "]" + a[i]);

}

System.out.println("配列の長さは" + a.length + "です");

}

}

演習: While文で書き換えてみよう

終了条件にlengthを使用してみよう

55

Page 12: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

多次元配列

配列をいくつかまとめて多次元にすることができる。例えば2次元配列の場合

配列の宣言は

//データ型 [][] 配列名;

int [][] arr_matrix;

配列の領域の割り当ては

//配列名 = new データ型[配列数1][配列数2];

arr_matrix = new int[10][2];

配列の宣言と領域の割り当てを同時に行なう場合は

データ型 [][] 配列名= new データ型[配列数1][配列数2]

配列の初期化(配列作成時に値を代入)するには

データ型 [][] 配列名 = {{値11,値12・・・},{値21,値22,・・・}};

多次元配列の要素数は

配列名[列].length; //このように列ごとに取得する

配列の応用(九九の表作成) class Sample12 {

public static void main(String args[]) {

int [] a = new int[9];

int [] b = new int[9];

for (int i=0; i < a.length; i++) {

a[i] = i+1;

for (int f=0; f<b.length; f++) {

b[f] = f+1;

System.out.println((i+1) + "×" + (f+1) + "=" + (a[i] * b[f]));

}

}

}

}

オブジェクト指向導入

前章までで基本的なJavaの文法を学習した。これからオブジェクト指向とは何か

ということを学んでいくが、まずクラスについて説明する。

クラスとはなんだろうか

クラスを説明するときプログラムの名前と話してきた。実はクラスは部品

(もの)の"性質"と"振る舞い"によって成り立っている。

今まで作成してきたプログラムはmainという"振る舞い"だけ記述してきた。

この振る舞いのことをメソッドという。

ではmainメソッドにつけていた、publicって何だろうか?

publicとは別のプログラムから呼び出すとき、そのクラスを使えることを意味する。

56

Page 13: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

さらにvoidって何だろうか?

voidは"戻り値"なしという意味である。別のプログラムから呼びだされたとき

に何も値を返さないという意味である。

そしてstaticって何だろう?

静的という意味です。クラス内で共通であるもの、クラス内で変化しないものにつける。

このようにプログラムに出てくる単語にには全て意味がある。これらの意味と使い方を理解することがオ

ブジェクト指向を理解する近道になる。

他の人が作ったクラスを利用する Javaは他の人が作ったクラスを利用することを前提に設計されている。自分が造る

どんな簡単なプログラムも他の人が使う場合を想定して書かなければならない。従って

どんなに簡単なプログラムでもいろいろな手続きを書かなければならない。

今までは簡単な変数・構文・配列を作成して動作を確認してきた。これらの知識を

元に、これからは、他の人が作ったクラスを利用することを中心に考えていく。

Javaでは始めからAPI(アプリケーションプログラミングインターフェース)群

として基礎的なクラス(部品)が提供されている。全て今まで作ってきたような

classファイルを元にしてパッケージという形でまとめられている。これらを

使って始めはあまり難しく考えないで、クラス(部品)利用の方法を覚えていこう。

キーボードからの入力について キーボードからの入力を受け付けるには下記のように記述する。

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String str = br.readLine();

int res=Integer.parseInt(str);

実はこの部分理解するのは大変である。Systemクラスのinフィールドに入ってき

た入力を、InputStreamReaderクラスで文字(文字ストリーム)に変換し、

BufferedReaderクラスを使ってメモリに格納する。その後、BudderedReader

のreadLineメソッドを使って、文字列変数に格納する。格納した文字列変数をさらに

IntegerクラスのparseIntメソッドを使って文字列変数をint型整数に変換する。

分りましたでしょうか??Javaではこのような部品(クラス)が無数にある。

そして日々増えつづけている。

従って全ての部品を暗記することは効率的ではない。部品の説明書の見方と使い方を覚える

必要がある。

使い方が分るようになると、作り方も分るようになってくる。そのときにまた

オブジェクト指向を見直してみたいと思う。

では、キーボードからの入力を利用して今まで学習してきたことを復習する。

復習:文字列の入力 1 import java.io.*;

class Sample13 {

public static void main(String [] args) throws IOException {

System.out.println("文字列を入力してください");

57

Page 14: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br = new BufferedReader(isr);

String str = br.readLine();

System.out.println(str + "が入力されました。");

}

}

復習:文字列の入力 2 import java.io.*;

class Sample14 {

public static void main(String [] args) throws IOException {

System.out.println("整数を 2つ入力してください");

//インスタンス(クラスを呼び出す)

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br =new BufferedReader(isr);

//メソッドの実行

String str1 = br.readLine();

String str2 = br.readLine();

System.out.println("最初に" + str1 + "が入力されました。");

System.out.println("次に" + str2+ "が入力されました。");

}

}

復習:文字列を double 型に変換 import java.io.*;

class Sample15 {

public static void main(String [] args) throws IOException {

System.out.println("数字を2つ入力してください。足し算をします");

InputStreamReader isr = new InputStreamReader(System.in);

BufferedReader br =new BufferedReader(isr);

String str1=br.readLine();

String str2=br.readLine();

double num1=Double.parseDouble(str1);//文字列を double型へ

double num2=Double.parseDouble(str2);

System.out.println("足算の結果は"+(num1+num2)+"です。");

}

}

復習:円柱の体積計算 import java.io.*;

class Sample16 {

public static void main(String [] args) throws IOException {

System.out.println("円柱の体積を求めるプログラムです(半径と高さを

入力してください)");

BufferedReader br =

new BufferedReader(new InputStreamReader(System.in));

System.out.print("半径は幾つですか:");

String str1=br.readLine();

58

Page 15: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

System.out.print("高さは幾つですか:");

String str2=br.readLine();

double r = Double.parseDouble(str1);

double h = Double.parseDouble(str2);

double pai = 3.14159;

double result = pai * r * r * h;

System.out.println("円柱の体積は" + result + "cm^3です。");

}

}

復習:文字列から文字を抜き出す import java.io.*;

class Sample17 {

public static void main(String [] args) throws IOException {

System.out.println("あなたは喫煙者ですか?");

System.out.print("Yまたは Nを入力してください:");

BufferedReader br =

new BufferedReader(new InputStreamReader(System.in));

String str = br.readLine();

//文字列変数の中の一文字を char型に置き換える

char res=str.charAt(0);

if(res == 'Y' || res == 'y'){

System.out.println("健康に悪いので止めたほうがいいですよ");

} else if (res == 'N' || res == 'n') {

System.out.println("健康的でよいですね");

} else {

System.out.println("Yまたは Nを入力してください ");

}

}

}

59

Page 16: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

クラスへの道 部品の使い方に少し慣れてきたところで、今度は部品を「作り」「使う」という作業を通じながら、オ

ブジェクト指向を考えていきたいと思う。

しばらく携帯電話を例に話を進める。皆さんにも馴染み深い携帯電話ですが、「どうして電話をかける

ことができるか」知っていますか? 「どうして電話を受けることができるか」知っていますか?

原理を知らなくても電話をかけることはできるはずです。番号を押して通話ボタンを押せば電話がかか

るはずです。「電話を使う人」は動作原理を知らなくても、説明書があれば使うことができるはずです。

一方、「電話を作るメーカの人」の立場に立つとどうでしょう? メーカーの人は電

話がどうして通じるのか知らないと電話を作ることができないはずです。

Java の場合も同様で、クラスを作る人(機能を提供する人)と、そのクラスを使って別のクラスを使う

人(機能を使う人)と2つの役割に別れます。

以降では、クラスを作る人の部分とクラスを使う人の部分で明確に、今自分がどちらの役割と担当して

いるか考えながら進めてください。

作る人にとっては、いかにいい携帯電話を作るかが重要、使うためにはデザインを決めたり、音質を上

げたりと「何をどのように作るか」が必要になる。

一方、使う人にとっては携帯電話をどのように使うかが重要、使うためには性質や個別情報を設定確

認したり、動作を実行したりの実際の方法「使い方」が必要になる。

60

Page 17: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

class KeitaiDenwa {

//性質(フィールド)

//個別情報(コンストラクタ)

//動作(メソッド)

}

クラスとは物を定義した設定書です。クラスの中にそのものがどのようなもので、どのような動作ができ

るか定義されている。従ってクラスの構成要素は以下のようになる。

性質=フィールド(メンバ変数、プロパティ)

個別情報=コンストラクタ

動作=メソッド(関数)

class User01 {

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

KeitaiDenwa kd = new KeitaiDenwa();

System.out.println("携帯電話を買いました");

}

}

class KeitaiDenwa {

//性質(フィールド)

//個別情報(コンストラクタ)

//動作(メソッド)

}

何か物を手に入れる(クラスを自分のプログラムで利用)場合、インスタンス化

という作業を行う。Javaの世界にはお金は存在しません。newという演算子を使えば幾らでも物を手に入

れることができる。この作業のことをオブジェクト(クラス)のインスタンス化と呼んでいる。また、同じ

インスタンス化した物(KeitaiDenwaクラス)でも他のものと区別するためにkdという名前がついている。

クラス(物)につけた名前のことをオブジェクト変数(インスタンス変数) と呼んでいる。

携帯電話クラスを作成しただけでは、まだ誰も使うことができない。単に携帯電話のカタログを作っ

たようなものです。それから、携帯電話クラスは勝手に電話をかけたりはしない。必ず所有者が必要です。

このクラスは誰かに手にとって使ってもらうことを前提としている。

色形状大きさ <性質>

電話をかける 電話を受ける <動作>

製造番号 自局番号 <個別情報>

61

Page 18: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

フィールドの定義と利用

クラスにはそのものを示す性質として変数を定義することができる。この変数のことをフィールド(メ

ンバ変数、プロパティ)と呼ぶ。

class User01 {

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

KeitaiDenwa kd = new KeitaiDenwa();

System.out.println("携帯電話を買いました");

System.out.println(kd.kakaku + "円です");

System.out.println(kd.bangou + "番です");

}

}

class KeitaiDenwa {

//性質(フィールド)

String kakaku = "18,000円";

String bangou = "090-0123-7777";

//個別情報(コンストラクタ)

//動作(メソッド)

}

フィールドにアクセスするには、インスタンスしたオブジェクト変数名とフィールド名を組み合わせ

てアクセスする。

オブジェクト変数名.フィールド名

また=の演算子を使うことにより、フィールドに値を入れることができる。

性質(フィールド)を定義するには、変数を定義するように、フィールドの型とクラス内で使う名前(と初

期値)を指定する。

不完全な携帯電話

今作っている携帯電話は電話を掛けることができないなど、不完全なものです。それ以外にも実は大

きな問題を抱えている。

問題点1:newでインスタンスしないと価格を知ることができない

new演算子でオブジェクトをインスタンスするということは、現実の世界で言うと物を購入する作業に

相当している。物を買わなければそのものの値段がわからないというのは不思議な話です。物を買う前、

すなわちインスタンスする前に価格がわかるように修正しなくてはいけません。

問題点2:設定値を買った人が変更できてしまう

今の状態だと、携帯電話を new でインスタンスした(手に入れた)人は、値段を変えることができてし

まいます。自分の番号も変えることができてしまいます。実際にはどうでしょう? そのようなことはで

きないはずです。従って、使う人が設定を変更できないように修正する必要がある。

そのためには、フィールドに修飾子というものを設定する。修飾子を設定すると誰がどのようにアクセ

ス可能かを定義できる。フィールド以外にクラスやメソッドにも定義できる。

class User01 {

62

Page 19: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

KeitaiDenwa kd = new KeitaiDenwa();

System.out.println("携帯電話を買いました");

kd.kakaku = "0円";

System.out.println("価格を"+ kd.kakaku +"に変えました");

}

}

修飾子(final/static/public/private/protected)

class User01 {

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

System.out.println(KeitaiDenwa.kakaku + "です");

KeitaiDenwa kd = new KeitaiDenwa();

System.out.println("携帯電話を買いました");

//kd.bangou = "090-1111-2222";

System.out.println(kd.bangou + "番です");

}

}

staticなフィールドにアクセスするには、

クラス名.フィールド名

でアクセスする。

finalのフィールドには値を代入することはできない。

privateのフィールドに対しては、User01からは全くアクセスできなくなる。

class KeitaiDenwa {

//性質(フィールド)

final static String kakaku = "18,000円";

final String bangou = "090-0123-7777";

//個別情報(コンストラクタ)

//動作(メソッド)

}

static (静的な)というキーワードをつけると、使う人はインスタンスしなくても使

うことができるようになる。

finalキーワードがつくとフィールドに対して一度だけしか値を代入できなくなる。

privateはアクセス権を示している。privateの場合は、そのクラス以外からのア

クセスを受け付けなくなる。

その他には、アクセス権に関係した次のキーワードがある。

public・・・全てのクラスからのアクセスを受け付ける

protected・・・サブクラス及び同一パッケージからのアクセスを受け付ける

"なし"・・・同一パッケージからのアクセスを受け付ける

63

Page 20: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

メソッドの定義と利用

class User01 {

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

KeitaiDenwa kd = new KeitaiDenwa();

System.out.println("携帯電話を買いました");

System.out.println(kd.kakaku + "円です");

System.out.println(kd.bangou + "番です");

kd.callPhone();

}

}

メソッドを呼び出すためには、以下のようにする。

オブジェクト変数名.メソッド名();

class KeitaiDenwa {

//性質(フィールド)

final static String kakaku = "18,000円";

final String bangou = "090-0123-7777";

//個別情報(コンストラクタ)

//動作(メソッド)

void callPhone() {

System.out.println("電話をかけます");

}

}

「電話をかける」といった動作のことを、メソッドと呼ぶ。メソッドは命令(ステートメント)を集めて名

前を付けたものです。何処から何処までがメソッドの範囲かを示すために{}で範囲を指定する。

不完全な携帯電話--その2-- 新たにメソッドを追加して電話をかけることができるようになった携帯電話だが、

まだ問題がある。

問題点1:電話をかけた結果がわからない

電話をかけたのはいいのですが、話中なのか、圏外なのか、通話できたのかわからない。

問題点2:番号を指定して電話をかけることができない

電話をかけるのは「使う人」です。携帯電話に対して番号を指定できなくてはいけない。

問題点1を解決する仕組みを「戻り値」という。メソッドを実行した結果がわかる。

問題点2を解決する仕組みを「引数」という。メソッドに対して情報を与える。

class KeitaiDenwa {

void callPhone() {

System.out.println("電話をかけます");

}

String callPhone(String str) {

System.out.println(str + "に電話をかけます");

64

Page 21: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

return "電話が通じました";

}

}

戻り値と引数のあるメソッドの利用

class User01 {

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

KeitaiDenwa kd = new KeitaiDenwa();

System.out.println("携帯電話を買いました");

System.out.println(kd.kakaku + "円です");

System.out.println(kd.bangou + "番です");

kd.callPhone();

String str = kd.callPhone("090-1111-2222");

System.out.println(str);

}

}

戻り値と引数のあるメソッドを使うには、以下のようにする。

戻り値の型 変数名 = オブジェクト変数名.メソッド名(引数);

またいままで出てきたvoidというキーワードは戻り値が無いという特別な型である。

ところで、クラス携帯電話には、callPhoneというメソッドが2つある。Javaでは引数の型や数を変え

ることにより同じ名前のメソッドを複数定義することができる。このことをメソッドのオーバーロード

という。

class KeitaiDenwa {

//性質(フィールド)

final static String kakaku = "18,000円";

final String bangou = "090-0123-7777";

//個別情報(コンストラクタ)

//動作(メソッド)

void callPhone() {

System.out.println("電話をかけます");

}

String callPhone(String str) {

System.out.println(str + "に電話をかけます");

return "電話が通じました";

}

}

メソッド名の前に「戻り値の型」の名前を書く。

引数は、メソッド名の後の()の中に書く。このとき、メソッド内で使う変数名とその変数の型とペアで

書く。複数ある場合は、「,」で区切る。

不完全な携帯電話--その3-- 戻り値や引数を利用することにより、ユーザーが自分で電話をかけ、かけた結果を知ることができる

65

Page 22: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

ようになった。でも更に問題が残っている。

問題点1:自局の番号が常に同じ

Java では携帯電話をインスタンスした時点で、手に入れることができる。オブジェクト変数名を変え

ることにより、いくつでもインスタンス可能である。しかし、現状のプログラムであると携帯電話は常に

同じ番号になってしまう。これはおかしなことである。

それを解決するために、Java ではコンストラクタというものが用意されている。初期化メソッドとも

呼ばれるコンストラクタはクラス名と同一の名前を持つ戻り値の無いメソッドである。

コンストラクタを利用することにより、個性のある携帯電話を作成することができる。

class KeitaiDenwa {

//性質(フィールド)

final static String kakaku = "18,000円";

private String bangou;

//初期設定(コンストラクタ)

KeitaiDenwa(String str) {

this.bangou = str

}

}

コンストラクタの利用

class User01 {

public static void main(String[] args) {

System.out.println("携帯電話を買いたいな");

KeitaiDenwa kd = new KeitaiDenwa("090-9999-0000");

System.out.println("携帯電話を買いました");

System.out.println(kd.kakaku + "円です");

//System.out.println(kd.bangou + "番です");

kd.callPhone();

String str = kd.callPhone("090-1111-2222");

System.out.println(str);

}

}

(注意)クラス内でコンストラクタを省略した場合は、自動的に何もしないコンストラクタが実行される。

これをデフォルトコンストラクタと呼ぶ。何かコンストラクタを自分で追加した場合は、デフォルトコン

ストラクタは自動では付かなくなる。インスタンス化とはコンストラクタの実行に他ならない。

class KeitaiDenwa {

//性質(フィールド)

final static String kakaku = "18,000円";

private String bangou;

//個別情報(コンストラクタ)

KeitaiDenwa(String str) {

this.bangou = str;

}

//動作(メソッド)

void callPhone() {

66

Page 23: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

System.out.println("電話をかけます");

}

String callPhone(String str) {

System.out.println(str + "に電話をかけます");

return "電話が通じました";

}

}

常に対象のオブジェクトが戻るのでコンストラクタには戻り値はない。引数の種類や数を変えオーバー

ロードは可能で、初期化の状態を色々ともつことができる。

クラスの継承

今まで携帯電話を例に話を進めてきた。Javaで作った携帯電話は、価格や自局番号な

どの性質(フィールド)をもち、電話をかけるといった動作(メソッド)を行うこと

ができた。また、携帯電話を買うとき(インスタンス化、実体化)に、自局番号を設定

できるようになっている(コンストラクタの実行)。

Java 世界の住人である、User01 さんはこの携帯電話を購入(インスタンス)して使うことができるよう

になった。

必要 小限の機能を持ったJavaの携帯電話である。現実の世界だと10年以上

前の機能しか持っていない。現在の携帯電話を考えてください。メールの読み書きを行うことができる。

Webを閲覧することができる。デジカメの機能がついている。

現在の携帯電話は非常に多機能である。でも、いきなり現在の携帯電話ができたわけではない。古い携

帯電話の機能の追加の積み重ねによって現在の携帯電話ができている。

Java にもこれと同じような仕組みがある。Java では継承という概念を使うことにより、今までのクラ

スの機能を受け継ぎ更に機能を追加していくことができる。

class IMode extends KeitaiDenwa {

}

class KeitaiDenwa {

//性質(フィールド)

final static String kakaku = "18,000円";

private String bangou;

//個別情報(コンストラクタ)

KeitaiDenwa(String str) {

this.bangou = str;

}

KeitaiDenwa(){

}

//動作(メソッド)

void callPhone() {

System.out.println("電話をかけます");

}

String callPhone(String str) {

System.out.println(str + "に電話をかけます");

return "電話が通じました";

}

67

Page 24: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

}

ここでは次世代の携帯電話 IMode を作成していく。IMode は今までの携帯電話の機能を全て含んでいる。

その上に、emailのやり取りやWebの閲覧を行うことができるものとする。

Javaで継承を行う場合は、extendsというキーワードを利用する。

継承元のクラスのことを親クラス(スーパークラス)といい、継承先のクラスのことを子クラス(サブク

ラス)と呼ぶ。

Javaの場合、親は必ず1つである。複数の親を持つことはできない。

class User01 {

public static void main(String[] args) {

IMode im = new IMode();

System.out.println("携帯電話を買いました");

System.out.println(im.kakaku + "円です");

im.callPhone();

String str = im.callPhone("090-1111-2222");

System.out.println(str);

im.setEmail("[email protected]");

System.out.println("メールは"+im.getEmail());

}

}

class IMode extends KeitaiDenwa {

private String email;

IMode(String str) {

super(str);

}

IMode(){

}

void setEmail(String str) {

this.email = str;

}

String getEmail() {

return this.email;

}

void callPhone() {

System.out.println("新しく電話をかけます");

}

}

IModeクラスはKeitaiDenwaクラスの全ての機能を受け継いでいるので、KeitaiDenwaができることはほ

とんど全てIModeでも行うことができる。

またIModeにしかない機能を追加することができる。

クラス継承の際の注意点 デフォルトコンストラクタ(空のコンストラクタ)

Java ではコンストラクタが記述されていない場合は、空のコンストラクタが自動的に実行されます。

このコンストラクタのことをデフォルトコンストラクタと呼んでいる。コンストラクタが記述されている

場合は、そのコンストラクタが優先されるので、仮に空のコンストラクタを実行したい場合は、明示的に

68

Page 25: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

空のコンストラクタを記述する。

super キーワード Java では親クラスは必ず一つである。従って親クラスを指し示すキーワードは一つでいいことになる。

Javaで親クラスを指し示すキーワードはsuperである。親クラスのコンストラクタやメソッド、フィール

ドに明示的にアクセスしたい場合は、superキーワードを利用する。

this キーワード クラス内の自分自身を指し示すキーワードとして this キーワードがある。明示的にクラス内のフィー

ルドやメソッドを指し示すときはthisキーワードを利用する。

オーバーライド もしも親クラスにあるメソッドを子クラスで再定義してしまった場合はどのようになるだろうか? こ

の場合は、子クラスで再定義したメソッドが優先される。親クラスにあるメソッドを子クラスで再定義す

ることをオーバーライドという。

インターフェース

KeitaiDenwaクラスを継承することにより、IModeクラスを作成してきた。

IModeクラスではKeitaiDenwaクラスのできることは全てできた。プラスで、emailのやり取りなどできる

ようになっている。

では更に現在の携帯電話について考えてみる。ここ数年、携帯電話にデジタルカメラがついているもの

が多くなっている。デジカメ付き携帯を実現するには、既存の携帯電話のクラスにデジカメの機能を付け

加えればよさそうである。

デジカメは現実世界と同じように Java の世界にもたくさんあるかも知れない。もしもデジカメクラス

が存在すれば、デジカメクラスを継承することにより、携帯電話に機能を追加できるわけである。

しかしここで問題が起きる。Javaでは継承できる親は一つだけである。携帯電話を継承しているIMode

クラスではデジカメのクラスを継承することができない。

この問題に対応するために Java ではインターフェースという機能を用意している。インターフェース

を実装することにより、その機能を入手することが可能となる。

インターフェースの定義

interface Dejikame {

String a_str = "写メール";

69

Page 26: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

void getPic();

}

class User01 {

public static void main(String[] args) {

IMode im = new IMode();

System.out.println("携帯電話を買いました");

System.out.println(im.kakaku + "円です");

im.callPhone();

String str = im.callPhone("090-1111-2222");

System.out.println(str);

im.setEmail("[email protected]");

System.out.println("メールは"+im.getEmail());

im.getPic();

}

}

class IMode extends KeitaiDenwa implements Dejikame {

private String email;

IMode(String str) {

super(str);

}

IMode(){

}

void setEmail(String str) {

this.email = str;

}

String getEmail() {

return this.email;

}

void callPhone() {

System.out.println("新しく電話をかけます");

}

public void getPic() {

System.out.println(a_str);

}

}

インターフェース実装の際の注意点

インターフェース内のフィールド

インターフェース内に定義したフィールドは、自動的に、public static final になる。かつ値を代入

しておかなければならない(初期化)。これを応用してインターフェースを定数表のように使える。

インターフェース内のメソッド

インターフェースではメソッドの定義のみ行う。またインターフェースを実装したクラスではインター

70

Page 27: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

フェース内で定義されているメソッドを全てオーバーライドしなくてはいけない。これを応用して、メソ

ッド名やソースの統一を図ることができる。また属性は必ずpublicになる。

インターフェースの実装

インターフェースを実装する際は、implements というキーワードを利用する。「,」で区切ることによ

り複数のインターフェースを実装することができる。

例外と例外処理

例外

Javaでは実行時のエラーのことを例外(Exception)と呼んでいる。この実行時のエラー(例外)

が起きると、JavaはExceptionオブジェクトを返却する。

例外処理

実行時のエラーに対処するためには、例外処理を記述する。まず、該当の処理を実行する。実行する

際に、試みるということで、try{}ブロックで囲みます。もしも例外が発生すると、Exceptionオブ

ジェクトが返却されます。Exceptionはcatch(Exception e){}ブロックで捕まえることができる。

あるメソッドを使うときに例外が起きることが予想されたとする。その場合は、例外が起きる可能

性があるということで、「例外を投げる」どうさを記述する。throwsというキーワードを利用する。

例外と例外処理

以下の例外処理を入れた場合、入れない場合を実行して比較しなさい。

例外処理を入れない場合

class ExceptionTest {

public static void main(String[] args) {

int[] int_arr = new int[2];

System.out.println(int_arr[2]);

}

}

例外処理を入れた場合

class ExceptionTest {

public static void main(String[] args) {

try {

int[] int_arr = new int[2];

71

Page 28: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

System.out.println(int_arr[2]);

} catch (Exception e) {

System.out.println("例外発生");

}

}

}

パッケージ Javaでは、同じような種類のアプリケーションをまとめてカテゴリーを作ることができる。この概念

をパッケージと呼んでいる。パッケージを定義するにはクラスの先頭に以下のように記述する。

package パッケージ名;

パッケージを指定しなかった場合は、無名のパッケージに自動的に収められる。

また、パッケージは階層化構造をもつことができ、フォルダー(ディレクトリ構造)と対応する。

独自のパッケージを定義する場合は、一般的に、URLを逆に記述したものを一意に識別するために利

用する。

既に用意されているパッケージを読み込む場合は、以下のようにimport文を使う。

import パッケージ名;

プログラム例

package jp.ac.meisei-u.mypackage;

import java.io.*;

class ExceptionTest {

public static void main(String[] args) {

try {

int[] int_arr = new int[2];

System.out.println(int_arr[2]);

} catch (Exception e) {

System.out.println("例外発生");

}

}

}

72

Page 29: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

第 2 部 Google Android 開発入門 ~Java による携帯アプリ開発~

3.Google Android とは Androidとはオープンソース(自由)で使える組込(ケータイ)のプラットフォームである。下

記のような特徴がある。

• ベースはLinux(Ver2.6)

• 開発はJavaのオブジェクト指向

• ApachV2ライセンス

• Googleを中心にOHAで開発が進む

• Android Marketというアプリケーション配布場所がある

• Googleのサービスとの親和性

Android の歴史 • 2007年11月 規格団体OHAがAndroidを発表

• 2008年9月 商用Android端末T-Mobile G1発表(10/22発売)

• Android SDK 1.0リリース

• 2009年2月Android SDK 1.1リリース

• 2009年4月Android SDK 1.5リリース

• 2009年5月 日本初のAndroid携帯電話がDoCoMoより発表

• 2009年7月DoCoMoよりAndroid携帯HT-03A発売

どのような団体が推進しているのか

OHA(Open Handset Alliance)

Mobile Operators

Handset Manufacturers

Software Companies

Semiconductor Companies

73

Page 30: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

Android のアーキテクチャ

一般の携帯端末SH-01AとAndroidを搭載した端末HT-03Aの比較

SH-01A

HT-03A

74

Page 31: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

「ケータイするGoogle(HT-03A)」ハードウェア

• タッチスクリーン

• 3.2インチのハーフVGA(320x480)ディスプレイ

• トラックボールとハードウェアキー

• 320万画素(記録画素数は310万)のオートフォーカス対応CMOS カメラ

• 無線LAN(802.11b/g)

• GPS+電子コンパス

• Bluetooth

• microSDHC

• 大きさは113 x 56 x 14mm、重さは123g

• 加速度センサー

Android Marketにてアプリケーションを世界中に配信できる

開発環境はEclipseを使う

75

Page 32: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

開発環境 Androidの開発には以下が必要になる。

1. JDK (Java Development Tools)

2. Eclipse

3. Android SDK

4. ADT (Android Development Tools)

JDKはJavaの開発環境で全てのJava開発で必要である。Eclipseはオープンソースの総合開発環境である。

Androdi SDKはAndrodiの開発を行うために必要である。ADTはEclispe上でAndroidの開発を行うための

プラグインになる。

4.Android アプリケーション入門 まずAndroidのアプリケーションを作成しエミュレーターで動くことを確認する。Eclipseを立ち

上げる。そのファイルメニューから新規を選択し、プロジェクトを選択する。

ここでAndroidプロジェクトを選択し、次へをクリックする。

プロジェクト名 :Hello

ビルドターゲット :Google APIs

アプリケーション名 :Hello

パッケージ名 :jp.ac.meisei_u.MyAppp

Create Activity :Hello

完了ボタンをクリックする。

76

Page 33: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

するとパッケージエクスプローラーにHelloが追加される。パッケージエクスプローラ

ーのHelloを右クリックし、実行からAndroidアプリケーションを選択する。し

ばらくするとAndroidのエミュレーターが起動する。起動が完了するまでにしばらく

時間がかかる(マシンスペックによるが5分程度かかるようである)。

エミュレーターを動かす エミュレータが起動したらマウスでmenuをクリックしてみよう。

「Hello World, Hello!」

と表示されているはずである。先ほど作成した Android のアプリケーションは何もしなくてもこのよう

に実行できるものとなっている。

Helloアプリケーションの中身を見る前に、色々とエミュレータを動かし、

Android の動きになれておこう。

77

Page 34: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

家のマーク :ホームに戻るボタン(必ずホームに戻す)

menu :各アプリのメニューを表示する

矢印の戻るマーク :一つ前の画面に戻す

通話ボタン :電話機能を開始する

終話ボタン :電話機能を終了する(スリープになる)

また、左上には電源ボタン、右中には音量調整ボタンがある。

ホーム画面の使い方

ホーム画面はパソコンでいうところのディスクトップに相当する。左右に合計 3 画面分の領域がある。

マウスのドラッグで移動することができる。ホーム画面でmenuを押すことによって「設定」から携帯電話

本体の設定を変更することができる。

またホーム画面でマウスを長押しするとこにより追加のメニューを表示し、ウィジェットなどを画面に

追加することができる。また画面上部は通知バーとなっている。この部分をドラッグして下に引き出すこ

とができる。画面下部にはアプリケーション領域を表示するためのタブが用意されていて、このタブを引

き出すことにより他のアプリケーションにアクセスすることが可能である。

エミュレーターは起動に時間がかかるので、一度起動したらそのままにしておくのが開発のポイントと

なる。

78

Page 35: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

実機にて動作を確認する USBケーブルで実機を繋ぐことにより実機にてすぐに動作を確認することができる。

サンプルを取り込み動作を確認する Android SDK には開発の手助けになるようなサンプルがたくさん用意されている。これらのサンプルを

取り込んでみよう。ファイルメニューから新規作成でAndroidプロジェクトを選択する。apiDemosとプロ

ジェクト名を入力し、外部ソースからプロジェクトを作成を選択する。ロケーションを

(Androidインストールホルダ)\platforms\android-1.5\samples\ApiDemos

にして完了ボタンをクリックする。実行すると下記のような画面が表示される。

ドキュメントを参照する Androdiに関する開発情報は、SDK付属のドキュメントを利用する。

(Androidインストールホルダ)\android-sdk-windows-1.5_r3\docs\index.html

を開くと,以下が表示される。

79

Page 36: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

このような画面が表示される。開発者ガイドとリファレンスをよく利用することになる。

80

Page 37: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

基本構造を理解する それではHelloアプリケーションに戻り、基本構造を理解していこう。

srcの中にJavaのプログラムが格納されている。ここではHello.javaが格納され

ている。genは生成されたJavaファイルでR.jsvaが格納されている。resという

フォルダは文字列や、画像などプログラム外のリソースが格納される。AndrodiManifets.xmlは

このアプリケーションがどのようなアプリケーションかを宣言する設定ファイルである。インター

ネットにアクセスするアプリなど必要に応じて宣言する。

Hello.javaから見ていく。

package jp.ac.meisei_u.MyApp;

import android.app.Activity;

import android.os.Bundle;

public class Hello extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

}

}

Android のアプリケーションは Activity を継承して作成する。Activity とは一つの画面を示すクラスで

ある。

onCreate メソッドはその1画面が生成されたときの処理を記述している。実際の処理は

setContentView(???); として何か???でセットしている。これは画面の見た目に何かセットせよという

命令になる。

81

Page 38: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

何をセットしているかというと、R.layout.mainと記述されているので、次にR.javaを見てみる。コメ

ントを見ると分かるとおり、このR.javaファイルは

resource dataを見て自動で生成されます。自分で修正指定はいけない。さてこの中に、layoutという内

部クラスと main というフィールドがあることが分かる。但し、main の値は「0x7f030000」と良く分から

ないものとなっている。

/* AUTO-GENERATED FILE. DO NOT MODIFY.

*

* This class was automatically generated by the

* aapt tool from the resource data it found. It

* should not be modified by hand.

*/

package jp.ac.meisei_u.MyApp;

public final class R {

public static final class attr {

}

public static final class drawable {

public static final int icon=0x7f020000;

}

public static final class layout {

public static final int main=0x7f030000;

}

public static final class string {

public static final int app_name=0x7f040001;

public static final int hello=0x7f040000;

}

}

リソースフォルダーを見ると、内部クラスに対応した、drawable、layout、

string といったフォルダーが見える。関連がありそうであるのでこの中を見ていこう。layout の

main.xmlを開くとグラフィカルな画面が表示される。

82

Page 39: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

どうやらこのmain.xmlが表示されいたようである。ではこのmain.xmlの中も見てみよう。main.xmlを右

クリックし、アプリケーションから開くを選択し、テキストエディタを選択する。すると下記のような画

面が表示される。

ここに、@string/helloと記述がある。次にstrings.xmlを同様にテキスト

エディタで開いて見ましょう。

helloという名前で値が「Hello World, Hello!」となっている。どやら 終的にはこの文字列が表示され

ていたようである。strings.xml は多言語対応したときにすぐに言語を切り替えることができるようにし

た仕組みである。

Androidは大きくこのような構造で構成されます。ここまでをまとめると

①実際のロジックを司るjavaファイル

②表示を司るxmlファイル

③自動生成で表示とjavaファイルを繋ぐR.java

となる。

下図はAndroidSDKのドキュメントにある図である。英語で下記の説明がついている。

The following diagram illustrates these loops and the paths an activity may take between states.

The colored ovals are major states the activity can be in. The square rectangles represent the

callback methods you can implement to perform operations when the activity transitions between

states.

色のついて長円はアクティビティが存在できる主要な状態で、長方形の部分はCallbackメソッドを実

行した状態を表している。全体でそれらの状態の遷移を表している。

83

Page 40: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

コンポーネントを利用する ではHelloアプリを修正してボタンを追加してみたいと思う。

strings.xmlに下記を追加してみよう。

<string name="btn_label">押して!</string>

main.xmlに下記を追加する。

<Button android:id="@+id/button_id"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text= "@string/btn_label" />

実行してみよう。

きちんとボタンが表示されたが、ボタンを押しても何もおきません。Androidの

アプリケーションはイベントドリブンといってイベントが起きたら(例えばボタンを押し

たら)処理が走るものとなっている。そのためにはどこでどんなイベントが起きるかを

プログラムで登録し、イベントが起きた後の処理を記述する必要がある。まずはボタン

にイベントを登録しよう。

84

Page 41: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

Hello.javaのsetContentView()の下に下記を追加する。

Button btn = (Button)findViewById(R.id.button_id);

さらに、このボタンにイベントを登録する。

ClickListener listener = new ClickListener();

btn.setOnClickListener(listener);

ClickListenerは自分で作るクラスになる。

class ClickListener implements OnClickListener {

public void onClick(View v) {

Button b = (Button)v;

b.setText("押したよ");

}

}

プログラム全体は下記のようになる。

package jp.ac.meisei_u.MyApp;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class Hello extends Activity {

/** Called when the activity is first created. */

@Override

85

Page 42: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button btn = (Button)findViewById(R.id.button_id);

ClickListener listener = new ClickListener();

btn.setOnClickListener(listener);

}

}

class ClickListener implements OnClickListener {

public void onClick(View v) {

Button b = (Button)v;

b.setText("押したよ");

}

}

86

Page 43: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

5.複数の Activity 間を遷移する

アプリケーション アクティビティActivityは1つの画面を表すクラスであることが先に述べられた。ここでは複数の

Activity間を遷移するアプリケーションを作る。

アプリケーションの構成

ActivityA

画面は下記のようになる。LayoutはTableLayout を使う。

ボタン2 を押すと、ActivityBへ、ボタン3を押すと、ActivityC へ遷移する。

MENUを押すと、ToA,ToB,ToCという項目があり、ToB,ToCを選択するとActivityB、ActivityC

へ遷移する。送信データの後ろはEditTextの枠を作る。ここに入れたデータを次のactivityに

送り、そのActivityの送信データ欄に書き入れることとする。

下記の画面構成でボタン1、ボタン2、ボタン3の表示文字はその動作にあったものにしなさい。

例えば「アクティビティ1へ」など

ActivityAの画面

ActivityB

画面は下記のようになる。LayoutはLinearLayout を使う。

ボタン1 を押すと、ActivityAへ、

ボタン3を押すと、ActivityC へ遷移する。

MENUを押すと、ToA,ToB,ToCという項目があり、

ToA,ToCを選択するとActivityA、ActivityC

へ遷移する。。送信データの後ろは

EditTextの枠を作る。

ActivityBの画面

ActivityC

画面は下記のようになる。LayoutはTableLayout を使う。

ボタン1 を押すと、ActivityAへ、

ボタン2を押すと、ActivityB へ遷移する。

MENUを押すと、ToA,ToB,ToCという項目があり、

ToA,ToBを選択するとActivityA、ActivityB

へ遷移する。。送信データの後ろはEditTextの

枠を作る。

ActivityCの画面

メニュー画面 ToA ToB ToC

IP address: 192.168.10.2

subnet Mask: 255.255.255.0

Default Gayeway: 192.168.10.1

送信データ: xxx

ボタン2 ボタン3

IP address: 192.168.10.3

subnet Mask: 255.255.255.0

Default Gayeway: 192.168.10.1

送信データ: _

ボタン1 ボタン3

IP address: 192.168.10.4

subnet Mask: 255.255.255.0

Default Gayeway: 192.168.10.1

送信データ: _

ボタン1 ボタン2

87

Page 44: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

条件

①各activityの画面で、IP addressの行(タイトル、値)での値は、JAVAプログラムから入れるよう

にしなさい。subnet Mask, Default Gateway の行(タイトル、値)での値はlayoutファイルに直接書き

込むこと。

② 初に起動するアクティビティ は ActivityA とする。

③ActivityAはTableLayoutでlayoutファイルを作れ。

ActivityBはLinearLayoutでlayoutファイルを作れ。

ActivityCは各自の選択に任せる。

このプログラムの作り方

ここでは2つのアクティビティが互いに遷移するプログラムを示す。これを参考に

各自で上記のプログラムを作りなさい。

2つのアクティビティが互いに遷移するプログラム

Androidの新規プロジェクトで以下を入れる

プロジェクト名 TestTransition2

パッケージ名 jp.ac.meisei.johojikken1

アクティビティ名 ActivityA

①ActivityA.java

TableLayoutを用いる、lauoutファイル名 main.xml

②ActivityB.java

LinearLayoutを用いる、lauoutファイル名 actb.xml

新規プロジェクト作成、ファイル作成、クラス作成時のスクリーンショットを付録に置くので参考に

すること。

以下がMENUの選択がないjavaプログラムとXMLファイルである

javaプログラム ActivityA.java

package jp.ac.meisei.johojikken1;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

import android.widget.TextView;

public class ActivityA extends Activity implements OnClickListener{

EditText et;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

View btnB=this.findViewById(R.id.button_B);

88

Page 45: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

btnB.setOnClickListener(this);

TextView tv=(TextView)this.findViewById(R.id.ipaddress);

tv.setText("192.168.10.2");

String sendData="";

Bundle extras= getIntent().getExtras();

if(extras != null){

sendData=extras.getString("SENDDATA");

}

et=(EditText)this.findViewById(R.id.senddata);

et.setText(sendData);

} public void onClick(View v){

Intent it;

switch(v.getId()){

case R.id.button_B:

et=(EditText)this.findViewById(R.id.senddata);

String data=et.getText().toString();

it=new Intent(this,ActivityB.class);

it.putExtra("SENDDATA",data);

startActivity(it);

break;

}

}

//ここに MENUのプログラムを入れる

}

TableLayoutを用いたXMLファイル:main.xml

<?xml version="1.0" encoding="utf-8"?>

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent" >

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_acta" />

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_ipaddress" />

<TextView

android:id="@+id/ipaddress"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</TableRow>

89

Page 46: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_subnetmask" />

<TextView

android:text="255.255.255.0"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_defaultgw" />

<TextView

android:text="192.168.10.1"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</TableRow>

<TableRow>

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_senddata" />

<EditText

android:id="@+id/senddata"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</TableRow>

<TableRow>

<Button

android:id="@+id/button_B"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_button2" />

</TableRow>

</TableLayout>

javaプログラム ActivityB.java

package jp.ac.meisei.johojikken1;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

90

Page 47: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.EditText;

import android.widget.TextView;

public class ActivityB extends Activity implements OnClickListener{

EditText et;

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.actb);

View btnA=this.findViewById(R.id.button_A);

btnA.setOnClickListener(this);

TextView tv=(TextView)this.findViewById(R.id.ipaddress);

tv.setText("192.168.10.3");

String sendData="";

Bundle extras= getIntent().getExtras();

if(extras != null){

sendData=extras.getString("SENDDATA");

}

et=(EditText)this.findViewById(R.id.senddata);

et.setText(sendData);

}

public void onClick(View v){

Intent it;

switch(v.getId()){

case R.id.button_A:

et=(EditText)this.findViewById(R.id.senddata);

String data=et.getText().toString();

it=new Intent(this,ActivityA.class);

it.putExtra("SENDDATA",data);

startActivity(it);

break;

}

}

//ここに MENUのプログラムを入れる

}

LinearLayoutを用いたXMLファイル:actb.xml

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical" >

<LinearLayout

android:layout_width="wrap_content"

91

Page 48: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

android:layout_height="wrap_content"

android:orientation="horizontal" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_actb" />

</LinearLayout>

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_ipaddress" />

<TextView

android:id="@+id/ipaddress"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_subnetmask" />

<TextView

android:text="255.255.255.0"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:orientation="horizontal">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_defaultgw" />

<TextView

android:text="192.168.10.1"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

<LinearLayout

android:layout_width="wrap_content"

92

Page 49: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

android:layout_height="wrap_content"

android:orientation="horizontal">

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_senddata" />

<EditText

android:id="@+id/senddata"

android:width="60px"

android:layout_width="wrap_content"

android:layout_height="wrap_content" />

</LinearLayout>

<Button

android:id="@+id/button_A"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="@string/title_button1"/>

</LinearLayout>

strings.xmlは以下である。

<?xml version="1.0" encoding="utf-8"?>

<resources>

<string name="app_name">TestTransition2</string>

<string name="title_ipaddress">IP address:</string>

<string name="title_subnetmask">subnet Mask:</string>

<string name="title_defaultgw">Default Gateway:</string>

<string name="title_senddata">送信データ:</string>

<string name="title_button1">ボタン 1:</string>

<string name="title_button2">ボタン 2:</string>

<string name="title_acta">Activity A</string>

<string name="title_actb">Activity B</string>

<string name="to_A">toA</string>

<string name="to_B">toB</string>

<string name="to_C">toC</string>

</resources>

AndroidManifest.xmlは以下である。

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="jp.ac.meisei.johojikken1"

android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".ActivityA"

android:label="@string/app_name">

93

Page 50: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

<intent-filter>

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

<activity android:name=".ActivityB"

android:label="@string/app_name">

</activity>

</application>

<uses-sdk android:minSdkVersion="3" />

</manifest>

MENUの選択を持つプログラムは以下である。

ActivityA.java,ActivityB.javaで「//ここにMENUのプログラムを入れる」の

部分に以下を入れる。このときMenuクラス、MenuItemクラス、MenuInflaterクラスをimportする

必要がある。それぞれのクラス名にマウスを置き、「Ctrl」+1(Ctrlキーと「1」キーを同時に押す)

とメニューが表示されるので、 上段のimportの選択をする。

@Override

public boolean onCreateOptionsMenu(Menu menu){

super.onCreateOptionsMenu(menu);

MenuInflater inflater = getMenuInflater();

inflater.inflate(R.menu.menu, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item){

switch(item.getItemId()){

case R.id.menu_A:

startActivity(new Intent(this, ActivityA.class));

return true;

case R.id.menu_B:

startActivity(new Intent(this, ActivityB.class));

return true;

}

return false;

}

resフォルダに新規フォルダを選び、「menu」フォルダを作り、そこにmenu.xmlファイルを作り、以下を

入れる。

ファイルres\menu\menu.xml を以下とする。

<?xml version="1.0" encoding="utf-8"?>

<menu xmlns:android="http://schemas.android.com/apk/res/android">

94

Page 51: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

<item android:id="@+id/menu_A"

android:title="@string/to_A"

/>

<item android:id="@+id/menu_B"

android:title="@string/to_B"

/>

</menu>

問題1 上記のプロジェクトを完成しなさい。

確認事項

(1) ボタンによるアクティビティ間の遷移がすべて行われている

(2) メニューによるアクティビティ間の遷移がすべて行われている

(3) 送信データを入れてボタンを押すと、データが次のアクティビティに送られる。

送信データを入れてMENUボタンを押す場合、データが次のアクティビティに送られない。

問題2 プロジェクト名はTestTransition3として、3つのActivity間を遷移す

るアプリケーションを作りなさい。

問題2の作成手順

1. ActivityA.java をコピーペーストして、ActivityC.java とする。

2. main.xml をコピーペーストして、actc.cml とする。

3. ActivityC をAndroidManifest.xmlの activityに加える。

4. リソースを使用するときは、そのデータをリソースファイルに加える。

これを行わないと、プロジェクトのクリーンを行うとき、R.java が作成されないで、

多くのエラーが起こる場合がある。

問題解のアクティビティで確認すること

問題1の確認事項の他に以下の確認をする

(1)「ActivityA, ActivityBからの、ActivityCへの」ボタンによる遷移がすべて行われる

(2)「ActivityA, ActivityBからの、ActivityCへの」メニューによる遷移がすべて行われる

(3) ActivityCのIP address, subnet Mask, Default Gatewayの値が正しい

(4) 送信データを入れてボタンを押すと、データが次のアクティビティに送られる。

送信データを入れてMENUボタンを押す場合、データが次のアクティビティに送られない。

問題3 以下の問題は、解答可能な学生が解答しなさい。(難しい問題と思う学生は解答不要)

(1) Androidでボタンをクリックすると遷移する仕組みを説明しなさい。

(2) AndroidでMENUを選択すると遷移する仕組みを説明しなさい。

(3) Androidで遷移するときデータを送る仕組みを説明しなさい。

注意:「プロジェクトのクリーン」 について

http://www.javadrive.jp/eclipse3/step/index6.html より引用

95

Page 52: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

プロジェクトに複数のソースコードなどが含まれている場合などに、修正やビルドを繰り返している場合、

ビルドを行った時点で修正がされていないソースコードなどはコンパイルは行われず必要なソースコード

だけがコンパイルされます。

通常はこれで問題無いのですが、ビルドするよりも前に作成されたクラスを全て破棄し、 初から全ての

ファイルを対象にコンパイルし直すにはプロジェクトのクリーンを行います。

クリーンを行うには「プロジェクト」メニューの中の「クリーン」をクリックして下さい。

「プロジェクトのクリーン」を行って、R.java が消失する例。

Hello プロジェクトの、strings.xml の 以下を削除する場合に起こる。

<string name=”hello”>Hello World, Hello!</string>

他のプログラムにエラーがある場合は、R.java が消失はない。

初にプロジェクトを作ったとき、プロジェクト名に「赤のエラーのマーク」が付いていて、

他のホルダー、ファイルに「赤のエラーのマーク」がない場合は、「プロジェクトのクリーン」

を行うと、「赤のエラーのマーク」がなくなる。

「プロジェクトのリフレッシュ」

プロジェクト配下のsrc,res,AndroidManifest.xmlを変更後に、 Eclipseにてプロジェクトのリフレッシ

ュを実施、 コンパイルエラーが出なければビルド成功である。例:フォルダにあるJAVAファイルを直接

書きかえると、そのファイルをEclipseで開けなくなる。これをEclipseで開こうとすると、以下の画面

になる。一度プロジェクトのリフレッシュを実施後に開ける。

96

Page 53: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

6.インターネットと HTML の利用 Android はインターネット接続が前提に設計されており、インターネット (クラウド) との親和性が高

い。インターネットに繋がることにより、アプリケーションの幅が大きく広がる。ここではいくつかの方

法でインターネットに接続するアプケーションを作成してみる。

その1:ブラウザ連携(アプリからブラウザ)を起動する

まずはインターネットに接続するためにはパーミッションを指定する必要があります。

<uses-permission android:name="android.permission.INTERNET"/>

上記をAndroidManifestファイルに追加しましょう。全マニュフェストファイルは下記のようになります。

<?xml version="1.0" encoding="utf-8"?>

<manifest xmlns:android="http://schemas.android.com/apk/res/android"

package="jp.ac.meisei_u.HelloBrowser"

android:versionCode="1"

android:versionName="1.0">

<application android:icon="@drawable/icon" android:label="@string/app_name">

<activity android:name=".HelloBrowser"

android:label="@string/app_name">

<intent-filter>

97

Page 54: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />

</intent-filter>

</activity>

</application>

<uses-permission android:name="android.permission.INTERNET"/>

</manifest>

次にボタンを追加しましょう。main.xmlに下記のように追加します。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/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="@string/hello"

/>

<Button android:text="Show Google!"

android:id="@+id/Button01"

android:layout_width="wrap_content"

android:layout_height="wrap_content"/>

</LinearLayout>

後にロジックを記述しましょう。

package jp.ac.meisei_u.HelloBrowser;

import android.app.Activity;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.widget.Button;

public class HelloBrowser extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

Button button01 = (Button)findViewById(R.id.Button01);

button01.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

98

Page 55: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

String url = "http://www.google.co.jp";

Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));

HelloBrowser.this.startActivity(intent);

}

});

}

}

Android ではアプリケーションから他の様々なアプリケーションを呼び出すことができます。ただしこの

方法を取ると別アプリケーションが起動することになります。

場合によっては、自分のアプリケーション内でHTMLなどを表示したくなるかもしれません。そのような場

合には、WebViewを利用します。WebViewを利用したサンプルを作成してみましょう。

今回はインターネット経由ではなく、アプリケーション内にHTMLファイルを配置しそのHTMLファイルを

表示してみましょう。ファイルにアクセスするには assets フォルダーに配置します。assets フォルダー

99

Page 56: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

に配置したファイルは「file:///android_asset/ファイル名」のようにアクセすることができます。

まずは、表示させるためのhello.htmlを作成しましょう。

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=shift_jis">

<title>演習</title>

</head>

<body>

<h2>こんにちは</h2>

<p>Android内に配置した HTMLファイルです!</p>

</body>

</html>

次にレイアウトのmain.xmlファイルにWebViewを追加しよう。

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

>

<WebView android:id="@+id/webview01"

android:layout_width="fill_parent"

android:layout_height="fill_parent" />

</LinearLayout>

後にロジックを記述しよう。

package jp.ac.meisei_u.HelloWebView;

import android.app.Activity;

import android.os.Bundle;

import android.webkit.WebView;

public class HelloWebView extends Activity {

/** Called when the activity is first created. */

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.main);

WebView webview01 = (WebView)findViewById(R.id.webview01);

webview01.loadUrl("file:///android_asset/hello.html");

}

}

演習:ButtonとWebViewを配置し、ボタンを押すとWebViewが切り替わるようなアプリを作成してくださ

い。初期表示はhello.htmlとし、ボタンを押したあとはhttp://www.google.co.jpが表示されるようにし

てください。

100

Page 57: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

付録:26 号館のソフト利用時の画面(英語で表示されることが多いので注意)

ウィンドウズ/Android SDK and AVD Manager を選択する画面

上記画面で「New」を選択した画面。ここで下記を入れて

「Create AVD」ボタンを押す

101

Page 58: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

ファイル/新規/その他 を選んで、新規Androidプロジェクトを作る画面。

プロジェクトに新クラスを作る画面。ファイル、フォルダを作るのもここから選ぶ。

102

Page 59: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

「ファイル/新規/その他 を選んで、新規Androidプロジェクト」を選んで表示される画面

103

Page 60: 3. Google Android アプリケーション入門 目次 · Androidプログラムを作るときに、何のプログラム(またはリソース)が何処に 置かれるか。それは何の役割をしているかなど。

行番号を表示する設定(ウィンドウ/設定 より)

インターネット接続でプロキシーの設定が必要な場合は、実行の構成ダイアログのターゲットタブ、エミ

ュレーター・コマンド行の追加オプションに下記を追加する。

-http-proxy http://proxy2.hino.meisei-u.ac.jp:3128

エミュレーターで確認する場合は設定後エミュレーターの再起動が必要となる。

104