1.

とにかく Android アプリを作ってみよう

1.1 Android Studio の起動
Android アプリの開発言語は Java です．Android アプリの開発では統合開発環境 Android
Studio が最も良く用いられており，この実習でも Android Studio を使います．この実習で用いる
Android Studio は Android アプリの開発用の設定を終えています．デスクトップ上の以下のアイ
コンをクリックして Android Studio を起動して下さい．

1.2 Android アプリケーションプロジェクトの作成
Android Studio 上では 1 つのソフトウェアは 1 つのプロジェクトとして管理されます．
「Start a new Android Studio project」を選んで，新しい Android Studio プロジェクトを作成します．

クリック

Android では画面を Activity と呼びます．ここでは，Empty Activity を選びます．

選ぶ

クリック

Java を選択

API15 を選択
クリック

HelloAndroid アプリのプロジェクトが作成される

1.3 Android アプリの起動作成したアプリは，「プロジェクトのルートを選択  Run メニュー  Run `app`」でエミュレータ上に起動することができます．

アプリケーションを実行する AVD を選ぶ（ここでは Pixel 3a XL API28）

エミュレータが起動して以下のようにアプリの画面が表示されたら成功です．

2.

アプリの画面レイアウトを変更してみよう

2.1 画面上のテキストの変更
Android アプリの画面レイアウトは簡単に変更することができます．プロジェクト内の res フォルダの中の layout フォルダの中に画面ごとに xml ファイルが配置されています．この xml ファイルを編集することによって画面レイアウトを変更することができます．以下の xml ファイルをダブルクリックして開いてください．

開く以下のようにエディタ上に画面レイアウトが表示されれば OK です．

エディタ上で GUI 部品を移動・編集したり，新しい GUI 部品を配置したりすることができます．

テキストビューを選択

まず，画面上に配置されている文字列（テキストビュー）を選択して，右側の Attributesビューを使ってその属性を変更してみましょう．以下のように text 属性を変更して表示されている文字列を変更します．また，一番上の id 属性はプログラム中から GUI 部品を操作するときに必要となるものなので，適当な文字列を割り当てておきます．ここでは，id として text を割り当てます．

ここでは idとして textを割り当て
text 属性を変更

マウスでドラッグしてテキストビューを画面中央上部に移動します．

移動

左側のパレットからボタンを選んで画面上に配置してみましょう．

配置

Text や画面端からの相対座標で位置を指定する

Text 属性を「OK」に変更して，OK ボタンにします．

3. ボタンを押したときの動作をプログラミングしてみよう
ここでは OK ボタンを押したときに，テキストビューに表示されている文字列を変更するプログラ
ムを書いていきます．

3.1 プログラム中で OK ボタンを取ってくる方法
まずは，OK ボタンの id を確認しておきます．（button）

id を確認しておく

次に画面を制御する Java プログラムを開きます．Android アプリでは，Java プログラ
ムはすべて java フォルダの中に格納されます．Java プログラムの拡張子は「.java」です．
画面毎にそれを制御するための Java プログラムが 1 つ作成されます．例えば Main 画面に対 し て ， 画 面 レ イ ア ウ ト は activity_main.xml で 定 義 さ れ ま す が ， 画 面 の 制 御 はMainActivity.java に記述されます．それでは，以下のように MainActivity.java をクリックして開いてみましょう．

Main 画面の制御プログラム⇒ 開く

Main 画面のレイアウト

MainActivity.java には MainActivity というクラスが定義されています．クラスというのは Java プログラムを構成する基本要素で，基本的に 1 つの.java ファイルに 1 つのクラスが定義されます．MainActivity クラスは，Main 画面を制御するクラスということになります．
なお，
Android では画面のことをアクティビティと呼ぶので覚えておいてください．

MainActivity クラス

onCreate()メソッド

MainActivity クラスの中にはさらにいくつかの処理を含めることができます．上の例では，1 つの処理が含まれています．Java では，このような処理のことをメソッドと言います．例えば，onCreate()というメソッドがありますが，これは Main 画面(アクティビティ)が作られたときに実行される処理です．画面(アクティビティ)を制御するクラスの中でもっとも重要なのは，この onCreate()メソッドです．Android ではアクティビティを制御するクラスには必ず onCreate()メソッドが含まれるようになっています．
OKボタンを取ってくるプログラムはこのonCreate()メソッドの中に記述します．OKボタンは以下の1行で取ってくることができます．

GUI 部品の部品の id

Button okButton = (Button)findViewById(R.id.button);

ここで，赤枠で囲った部分が事前に確認しておいた OK ボタンの id になっていることに注意してください．この id の部分を変えることで画面上の任意の GUI 部品をプログラム中で取ってくることができます．ここで取ってきたボタンはプログラム中の「okButton」という変数に格納されます．onCreate()メソッドの中に OK ボタンを取ってくるプログラムを追加した結果は以下のようになります．

ここで赤文字が 2 箇所出ていますが，これはこの部分でコンパイルエラーが発生していることを示しています．

この赤文字をクリックすると，Android Studio がエラーの解消方法を提示してくれます．
ここでは，「Alt+Enter」キーを押してコンパイルエラーを解消します．

3.2 OK ボタンを押したときに実行されるプログラム
プログラム中で OK ボタン取ってきたのは，取ってきた OK ボタンに，ボタンを押したときの処理を設定するためです．先ほど追加したプログラムの下に以下の赤枠で囲った部分を追加してください．

Button okButton = (Button)findViewById(R.id.button);
okButton.setOnClickListener(new View.OnClickListener() {onClick()メソッド

public void onClick(View v) {}});

ちょっと複雑なプログラムですね．実際このプログラムをきちんと読めるようになるためには Java をかなり勉強しなければなりません．この時点でそこまで Java を深く理解している必要はありませんので，今のところはコピペで結構です．ただし，上のプログラムの中に onClick()メソッドが含まれていることに注意して下さい．この onClick()メソッドが OK ボタンを押されたときに実行される処理に相当します．上のプログラムのままでは，onClick()メソッドの中に何の処理も書かれていないため，このままでは OK ボタンが押されても何も起こりません．そこで，onClick()メソッドの中に以下の 2 行の処理を付け加えることにします．

GUI 部品の部品の Id
public void onClick(View v) {TextView textView1 = (TextView)findViewById(R.id.text);
textView1.setText("OK Button Clicked!!");}Button ではなく TextView に

この 2 行のうちの 1 行目を見てください．先ほど書いた OK ボタンを取ってくる処理に似ているのがわかるでしょうか？これは，画面上に配置されたもう一つの GUI 部品であるテキストビューを取ってくるプログラムです．id を指定する部分が，テキストビューの id である「text」となっていることに注意して下さい．また，ここで取ってくる GUI 部品はボタンではなくテキストビューなので，先ほど「Button」となっていたところが「TextView」となっていることが分かると思います．2 行目で取ってきたテキストビューに”OK ButtonClicked!!”という文字列を設定しています．
最終的に onCreate()メソッド内に追加するプログラムは以下のようになります．これで，OK ボタンを押すとテキストビューの表示が”OK Button Clicked!!”に変わるというプログ
ラムが書けました．

Button okButton = (Button)findViewById(R.id.button);
okButton.setOnClickListener(new View.OnClickListener() {public void onClick(View v) {TextView textView1 = (TextView)findViewById(R.id.text);
textView1.setText("OK Button Clicked!!");}});

Android Studio では編集中のファイルは自動保存されるので，ユーザが明示的にファイルを保存する必要はありません．

アプリケーションを起動し，OK ボタンを押してテキストビューの表示が変われば成功です．

変更

クリック

4. 新規画面(アクティビティ)の追加と画面遷移
4.1 新規アクティビティの追加
Android アプリのアクティビティは「プロジェクトのルートを選択  File メニュー  New
 Activity  …」で追加します．ここでは，Empty Activity を追加します．

Empty Activity を選択アクティビティ名を付ける

クリックして終了新しいアクティビティ用に追加されたファイル

配置text 属性を変更

4.2 画面遷移のプログラム
画面遷移をするためのプログラムの書き方を説明します．まず Main アクティビティに次のアクテ
ィビティに進むための Next ボタンを追加します．

id の確認text 属性の変更

追加

MainActivity.java を開いて下さい．

開くｋonCreate()メソッドの最後に以下のプログラムを付け加えてください．

Next ボタンの id
Button nextButton = (Button)findViewById(R.id.button2);
nextButton.setOnClickListener(new View.OnClickListener() {現在public void onClick(View v) {遷移先

Intent intent = new Intent(MainActivity.this,SubActivity.class);
startActivity(intent);}});

次のアクティビティ(SubActivity)に遷移する処理

Next ボタンを取ってきてボタンを押したときの処理を設定する部分は，OK ボタンのときと同じです．ただ，押したときの処理内容（onClick()メソッドの中の 2 行、赤枠内）が異なっています．onClick()メソッドの中の 1 行目で現在のアクティビティと遷移先のアクティビティを設定して画面遷移の準備を行います．2 行目で実際に画面遷移を行います．

アプリケーションを起動し，Next ボタンをクリックします．

クリック

次の画面に遷移すれば成功です．

5. 位置情報(GPS)を取得してみよう
5.1 位置情報取得のための準備(プログラム編)
Sub アクティビティで GPS から取得した位置情報を表示するようにしてみましょう．位置情報を取得するには LocationManager という標準クラスを使用します．具体的には以下の 2 行をSubAvticity.java の onCreate()メソッドの最後に追加します．

onCreate()に追加

LocationManager manager = (LocationManager)getSystemService(LOCATION_SERVICE);
manager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, this);

LocationManager が赤色になっていると思いますので，クリックして「Alt+Enter」キーを押してください．エラーを解消してもまだ別のエラーが残っていると思います．SubActivity クラスの最初の行に以下の赤枠の部分を付け加えてください．

追加

public class SubActivity extends AppCompatActivity implements LocationListener{

追加部分の LocationListener が赤色になっているので，先ほどと同様に「Alt+Enter」キーを押してエラーを解消します．そうすると，今度はこの行の「SubActivity」の部分にエラーが出るようになります．クリック

選択次にこの部分をクリックし，「implement methods」を選んで再びエラーの解消をしましょう．

クリック

OK を押すと，SubActivity クラスの下の方に新たに 4 つのメソッドが自動で追加されたと思います．これで，すべてのエラーが解消されたはずです．
プログラムについて説明しましょう．onCreate()メソッドに追加した 2 行はあまり深く考えずに，基本的にコピペで構わないと思います．ただ，この 2 行を付け加えることで，SubActivity クラスに位置情報が送信されるようになるということだけ知っておいてくだ
さい．次に SubActivity クラスの最初の行に追加した「implements LocationListener」の部分ですが，これは SubActivity クラスが送られてきた位置情報を受け取れるようにするためのものです．実際に位置情報を受け取るのは，後から自動で追加された以下の

onLocationChanged()メソッドになります．位置情報が変わるたびにこのメソッドが実行されるようになります．

public void onLocationChanged(Location location) {}5.2 位置情報取得のための準備(マニフェスト編)
位置情報を取得できるようにするためにはプログラムの準備だけでは足りません．実際に上のプログラムを動かしても位置情報は取得することができません．Android 端末にはいろんなセンサーが用意されていますが，アプリからそれらのセンサーを使うためにはマニフェストファイルの修正を行わなければなりません．マニフェストファイルとは，以下の場所にある AndroidManifest.xml ファイルのことです．このファイルをダブルクリックして開いてみましょう．

開くAndroidManifest.xml の全体がテキスト表示されるのでこれを直接編集していきます．

マニフェストファイルの下の方に以下の 2 行を付け加えてください．
<activity android:name=".MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application>

追加<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/></manifest>
これは，このアプリが GPS センサーにアクセスする許可を与えることを示しています．

5.3 位置情報取得と表示
以上で位置情報を取得できるようにするための準備が完了しました． それでは，再びSubActivity.java を修正して位置情報を取得して画面に表示できるようにしましょう．先ほども説明したように，位置情報は以下のメソッドで受け取れるようになっています．

public void onLocationChanged(Location location) {}このメソッドの引数「location」に位置情報が渡ってきています．具体的には，緯度と経度の情報が入っています．まずは，このメソッドの中で緯度と経度を受け取るための変数を用意しましょう．

public void onLocationChanged(Location location) {double latitude, longitude;

追加

Java では C 言語と同様に，int 型，float 型，double 型などの変数を使うことができます．
また変数を使う場合は事前に宣言をしておかなければならないのも同様です．なお，
latitude は緯度，は longitude 経度を表します．これらの変数に実際の緯度と経度を代入するために以下の 2 行を付け加えてください．

追加

latitude = location.getLatitude();longitude = location.getLongitude();

引数 location の中から緯度情報と経度情報を取ってきて，それぞれ latitude と longitudeという変数に代入しています．次にこれらの情報をテキストビューに表示するようにしてみましょう．そのためにテキストビューの id を確認します．

id を確認開く

選択「textView」という id が確認できたと思います．
さて，SubActivity.java の修正の続きです．現時点で onLocationChanged()メソッドの内容は以下のようになっているはずです．

public void onLocationChanged(Location location) {double latitude, longitude;
latitude = location.getLatitude();longitude = location.getLongitude();}

このメソッドの最後に以下の 2 行を付け加えてください．

テキストビューの id

TextView textView2 = (TextView)findViewById(R.id.textView);
textView2.setText("緯度:" + latitude + ", 経度:" + longitude);

1 行目はもう分かりますね．2 行目で緯度と経度の値をテキストビュー（textView）に設定しているのですが，1 つ注意して欲しいのがこの行で行っている文字列の足し算です．
Java では文字列同士や文字列に数字を足し算を使って足すことができ，これは文字列の連結を意味します．C 言語では文字列の連結に strcat()関数を使っていたと思いますが，足し算の方がはるかに簡単ですね．

5.4 エミュレータ上での実行
アプリを実行してエミュレータ上で Sub アクティビティを表示します．

表示が変わらないクリックしかし緯度も経度も表示されません．ここで，エミュレータの右側にあるコントローラの「・・・」をクリックして下さい．
そうすると，以下のようなダイアログが表示されます．

クリック

ここで Location タブを選んで SEND ボタンをクリックして下さい．これはエミュレータ上の仮想の GPS に指定した緯度と経度の値(仮の値)を送ることを意味しています．

以下のように Sub アクティビティに緯度と経度の仮の値が表示されれば成功です．

緯度と経度(仮の値)が表示される