programming24 第3回androidアプリ勉強会
Post on 23-Jun-2015
1.271 Views
Preview:
DESCRIPTION
TRANSCRIPT
コデアルAndroidアプリ勉強会
- Programming 24 -
2014年5月11日2014年5月25日2014年6月8日
到達目標
● 人に見せられるAndroidアプリが作成できる
(名刺代わりのアプリ)
(生活を便利するアプリ)
● 現在地をメールするアプリ
Androidアプリの開発に必要な知識を身につける
1.Androidとは
2.開発環境を準備する
3.Javaの基礎
4.Androidアプリの作成
5.基本的なUI作成
現在地をメールするアプリ
● GPS情報の取得
● プリファレンス(情報の記憶、保持)● メール送信(インテント)
1.Androidとは
● googleが開発したスマートフォン用のOS● ライセンスフリーのOS(Linuxカーネル)
● 2014年現在、スマートフォン用のOSとしては、シェア1位
● 2003年に、Android社設立
● 2005年にgoogleが買収
● 2009年に、開発ツールAndroidSDKr1.5リリース
(この時点から、市場に登場)
● 開発ツール、技術ドキュメント、ソースコードを誰でも無償で入手することができる
● スマートフォン以外の組み込み分野へ展開されている
例えば、ネットブック、カーナビ、TVレコーダ、デジタル家電など
Androidで何ができるのか?
● 次のような機能を利用したアプリを作成できる
- 音声通話(電話)
- フルブラウザによるWebサイト閲覧
- 2D/3Dグラフィックスの描画
- 音声、映像、静止画の表示・再生
- カメラ(静止画、動画)
- Bluetooth、WiFiによるデータ通信
- GPS
- NFC
- SQLiteによるデータストレージ
- 各種センサー
加速度センサー、傾きセンサー、磁気センサー
温度センサー、明るさセンサー、接近センサー
ジャイロスコープ、圧力センサーなど
Androidのバージョン1 Android 1.0 Astro
2 Android 1.1 Bender
3 Android 1.5 Cupcake ←ここから、google
4 Android 1.6 Donut コードネームがスイーツ名
5 Android 2.0/2.1 Eclair
6 Android 2.2 Froyo
7 Android 2.3 Gingerbread
8 Android 3.x Honeycomb
9 Android 4.0 Ice Cream Sandwich
10 Android 4.1/4.2/4.3 Jelly Bean
11 Android 4.4 KitKat
API Level
● バージョンに対応したAPI Levelが決められている。
● API Levelにより、使える機能が変わる。
● 開発時には、どのAPI Levelを対応するか、決める
必要がある。
● また、開発情報を調べる際にも、どのAPI Levelに対応した情報かを意識しなければならない。
2.開発環境を準備する
● 開発に必要なもの
1)統合環境
Eclipseまたは、Android Studio
2)AndroidSDK
3)プログラミング言語
Java
1)と2)は、統合環境に含まれている
開発ツールダウンロード1
● ここでは、Eclipseを使います。実はAndroid Studioの方が評判が良いのですが、今のところ、Eclipseの方がメジャーのため。
● SDKダウンロード
http://developer.android.com/sdk/index.html
MACの場合は、
[DOWNLOAD FOR OTHER PLATFORMS]をクリック
開発ツールダウンロード2
● Java SE 7 Development Kit (JDK)ダンロードhttp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
● Pleiadesプラグインダウンロード
Eclipseを日本語化するためのプラグイン
http://mergedoc.sourceforge.jp/
開発環境インストール1
● JDKのインストール
デフォルト設定のままインストール
注意)統合環境が64Bit版の場合は、64Bit版のJREが必要になります。
● Android SDKのインストール
AndroidSDKのzipを適当なフォルダーで解凍。
フォルダーをADTとリネームしてCドライブのルート直下に移動。
開発環境インストール2
● Eclipseの日本語化
● Pleiadesプラグインを導入
● ダウンロードしたpleiades.zipを解凍
● 解凍したファイルを全てEclipseのフォルダーの下に移動
開発環境インストール3
● eclipseフォルダーの中にあるeclipse.iniファイルを編集。eclipse.iniの末尾に-javaagent:plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar=default.splash
という記述を付加。
● Eclipse.exeを実行
↑これで、準備完了!
開発環境の確認
● Androidアプリの開発環境の確認をします。
● プロジェクトの作成
今までは、ファイルメニューの新規で、Javaプロジェクトを選択していましたが、今回から、Androidアプリケーション・プロジェクトを選択します
● 新規Androidアプリケーションダイアログが表示されます。
新規Androidアプリケーション
● アプリケーション名
アイコンに表示する名前● プロジェクト名
このプロジェクトにつける名前
(アプリケーション名と同じで構わない)● パッケージ名
アプリの名前の衝突をさけるための名称
Javaの慣習として、ドメイン名を利用することが多い。
次に
● その他は、初期値のまま。● ここまでの作業で、空のアプリができています。
動作確認
● 実機につないで動作確認でも良いのですが、
まずは、エミュレータで実行します。
● そのために、Android仮想デバイスを作成します。
Android仮想デバイスの作成
● ウィンドウメニューから、Android仮想デバイスマネジャーを選択
● 新規ボタンをクリック
● AVD名は、任意
● デバイスの選択は、ターゲットの画面サイズにより選択
● Skinは、「Skin with dynamic hardware controls」を選択
Android仮想デバイス
● 作成が完了したら、エミュレータを動かしてみる
● かなり遅いです。PCが遅いと数分かかる。
● 起動すると、Androidの画面が表示される
● 画面の機能確認であれば、十分に使えます。
● 特に、Androidは、画面サイズがたくさんあるので、
すべての装置を準備できない場合は、エミュレータだけで確認することがあります。
アプリの動作確認
● 実行画面より、実行を選択すると
エミュレータ上に、先ほど作成したアプリの画面が表示されます。
実機での動作確認
● 実機を持っている人は、実機で動作させる方が、動作確認が早い。
● 実機以外に必要なもの
USBケーブル(通信用)
*間違えて、充電を使っても動作しません。
● 対象の実機用のADB用USBドライバをインストールする必要があります。これは、対象の実機によって変わります。対象の実機のサイトでダウンロードすることになります。(Windowsの場合)
実機の接続確認
● 実機のUSBデバッグを有効にする必要があります
実機のバージョン、機種によって、設定箇所が異なります。
● Eclipseで、DDMSを選ぶとデバイスが繋がっている場合は、デバイス一覧に名称が表示されます。
● DDMSでは、デバイス内のファイルを見ることも可能です。
USB デバッグを有効にする
● [設定|開発者向けオプション]で[USB デバッグ]
オプションをオンにします。
● Android 4.2 以降では、[開発者向けオプション]がデフォルトで非表示になっています。
● [設定|<デバイス種別>情報]を開き、下部の[ビルド番号]を 7 回タップすると、[設定|開発者向けオプション]が使用可能になります。
● [スリープしない]オプションをオンにした方が開発しやすい。
Javaの基礎
● Javaを使って、Androidアプリを作成するため。
● Javaの基礎を学ぶ。
● よく使いそうな部分だけ、抜粋して説明。
Javaの基礎
● Androidアプリ用に、準備した開発環境で、Javaの基礎を学ぶために、コンソールアプリで試す。
● コンソールアプリは、ちょっとしたコードを試すのに、便利です。
● Androidアプリを開発するときも、小さい機能を試すときに、コンソールアプリで試すことは、よくあります。
Javaの基礎
● Androidアプリ用に、準備した開発環境で、Javaの基礎を学ぶために、コンソールアプリで試す。
● コンソールアプリは、ちょっとしたコードを試すのに、便利です。
● Androidアプリを開発するときも、小さい機能を試すときに、コンソールアプリで試すことは、よくあります。
● Javaの基礎のサンプルコードは、以下のURLのLesson1からLesson8までです。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
Eclispeでコンソールアプリ
● Eclipseを起動します
● ファイルメニューの新規で、Javaプロジェクトを選択します。(Androidアプリの場合とは異なります)
● Javaプロジェクトの作成画面が開きます
● プロジェクト名を入力(任意の名称)● 完了をクリック● プロジェクトを選択して、右クリックメニューから
新規を選び、その中のクラスを選択● クラスの作成画面が表示されます
Eclispeでコンソールアプリ
● 名前(クラス名)を入力します(任意の名前)
説明をわかりやすくするため、「Sample」としておきましょう。
● public static void main()の欄にチェックを入れる
● Sample.javaというファイルが作成され、
ファイル内には、Sampleクラスがあり、メソッドとして、main()ができています。main()次の中カッコの中に、プログラムを書いていきます。
最初のプログラム
● main()の下にある、todoの次の行に、プログラムを
書いていきます。
● 「syso」と入力して、CTRL+スペースを押してください。(コード補完のショートカット)
● System.out.println()というコードが書かれます
● System.out.println()の()の中に、文字を書きます。””で囲った中に好きな文字を入力してください。名前などで構いません。
● メニューの実行から、実行を選びます。● 文字が、画面下のコンソールに出力されます。
最初のプログラム
● 問題がなければ、文字が出力された思います。● 問題があった場合は、エラーとなっています。● エラー原因を取り除いて、再度、実行しましょう。● 下部の問題というタブを除くとエラー要因が書かれ
ています。● エラーの修正は、慣れるまでは、とても大変な作業
です。
エラーの修正のコツは(重要!)
● 1行目のエラーに注目すること。
2行目以降のエラーは、1行目が原因で出ていることがあるので、1行目を無視してはいけない。
● 小さく作って、小さく試す。
たくさんのコードを一度にコンパイルすると、エラーが多すぎて、探しにくいです。
● 行数の多いコードのエラーを見つけるには、2分探索を用いると早く原因にたどり着けます。
● エラー内容をコピーして、googleで検索。
変数とは
● 値を入れる箱のようなもの● 型がある。箱のサイズ、種類が決まる
● とりあえず、int型とboolean型を覚えよう。
● プリミティブ型(基本的な型)
● intは、整数を扱う型。
(-2147483648~2147483647)● booleanは、ture(真)かfalse(偽)
変数の使い方1
● 宣言方法
型名 変数名;● 変数名は、AからZ、aからz、0から9、アンダーバー
(_)が使える。但し、先頭に数字は使えない。
任意の名前をつけることができる。
わかりやすい名前をつけた方が後で読みやすい。● 例
int abc01;
boolean a_flag;
変数の使い方2
● 変数に値を代入する● 例
int temp;
temp = 10;
boolean flag;
flag = false;
変数の使い方3
● 変数の値を表示してみる
● 最初に使ったSystem.out.println()を使って。
int temp = 100;
System.out.println(temp);● 上記を先ほど書いたプログラムのmain()の中に書
いて動かしてください。● 以下の文を追記して、動かしてください。
System.out.println(“Valude = “ + temp);
int temp = 100;
演算子
● コンピュータなので、当然計算ができます。● 計算の時に使うのが演算子です。
四則演算+剰余の演算。
● + 足し算
● - 引き算
● * 掛け算
● / 割り算
● % 剰余
演算子を使う
● 以下の演算で、temp3の値がどうなるか試すこと。
● int temp1 = 100;
int temp2 = 30;
int temp3 = 0;
temp3 = temp1+temp2;
temp3 = temp1-temp2;
temp3 = temp1*temp2;
temp3 = temp1/temp2;
temp3 = temp1%temp2;
制御構文(if文)
● 分岐をするための構文
int money = 100;
if(money >= 120){
System.out.println(“缶ジュース”);
} else {
System.out.println(“購入不可能”);
}
moneyの値を変えて、「缶ジュース」を表示してください。
制御構文(for文)
● 繰り返しを行うための構文
for(int i=1;i<=10;i++) {
System.out.println(“繰り返し:” + i);
}● Money >= 120、i<=10は、条件式
● >=、i<=は、比較演算子。等しいは、==● if文、for文ともに、入れ子可能
演習
● 二つの変数(int)を準備し、大きい方の数を
if文で判定し、表示しなさい。
(数値の値を変えても動作が正しいこと)● 1から100までの奇数を表示
(forとifの組み合わせ)
奇数の判定は、剰余を使うと簡単。
関数
● 入力を与えて、出力を得る● 入力のことを引数という● 出力を戻り値という
● function(x,y)=x+yは、
int plus(int x,int y){
return x+y;
}
関数
● 前のページのままでは、コンパイルが通りません。
public static int plus(int x,int y){
return x + y;
} ● この関数の呼び出しは
int a = 10;
int b = 90;
int answer = plus(a,b);
関数
● 関数の定義
型名 関数名(型名 仮引数名) {
// 処理
}● 関数の呼び出し
関数名(実引数名);● 戻り値がない場合は、型名をvoidとする。その場合
は、returnが不要となる。
演習
● 割引計算関数 discount();を作成
● 引数に元の値段を与えて、値引き後の値段を得る
(割引率は30%)(*整数演算だけで行う)
元の値段が100なら、値引き後は、70が得られる。
Int result = discount(100);● 割引率を2つめの引数として関数を作成。
*割引率も整数
オブジェクト指向
● クラス
変数定義(フィールド)とメソッド定義からなる設計書。(レシピのようなもの)
● メソッド
関数定義と同様。● インスタンス生成
クラス(設計書)を元に、実体を作ること。
(レシピを見て、実際の料理を作るイメージ)
オブジェクト指向
● クラス
変数定義(フィールド)とメソッド定義からなる設計書。(レシピのようなもの)
● メソッド
関数定義と同様。● インスタンス生成
クラス(設計書)を元に、実体を作ること。
(レシピを見て、実際の料理を作るイメージ)
クラスの書き方(例:Dogクラス)
class Dog
{
private String Name; // Stringは、文字列型
public void setName(String n){
Name = h;
}
public void showProfile(){
System.out.println(“名前は、” + Name + “です”);
}
}
クラスの使い方
● インスンタンスの生成
● 先ほどのDogクラスを使ってみる
// インスンタンスの生成
Dog myDog = new Dog();
myDog.setName(“たろう”);
myDog.showProfile();
演習
● 例題のDogクラスに、次の内容を追加してください
年齢を保持するint型のフィールドを定義。
● 年齢を設定するメソッド、SetAge。
● ShowProfileメソッドで名前、年齢を表示するようにする。
● 修正したDogクラスを使用して次のプログラムを作成しなさい。
● Dogクラスのインスタンスを作成する。
● 名前、年齢を設定する。
● プロフィールを表示する。
配列とコレクションクラス
● 配列は、あまり使わずにコレクションクラスを使うことが多いので、あえてコレクションクラスを一緒に説明します。
● 配列とは、複数の変数を同じ名前でまとめて扱えるようにしたもの。
● 例えば、Seito01,Seito02,Seito03,Seito04のように、4つ変数で4人分のデータを表現する代わりに
● int Seito[] = new int[4]; これで、4人分のデータを定義できる。使い方は、Seito[0]、Seito[1]のように、カッコの中に数値を入れてアクセスする。
配列の使いづらい点
● int Seito[] = new int[4];のようにした場合
● Seito[4] = 100; とすると配列の範囲をこえるので、エラーとなる。(プログラムが落ちる)
● 最初の要素数を超えた場合、後で、要素数を拡張しようとしてもできない。
コレクション(ArrayList)クラス
● 書き方
ArrayList<型> 変数名 = new ArrayList<型>();● 先ほどの配列をArrayListにしてみる
ArrayList<Integer> Seito
= new ArrayList<Integer>();● 型は,プリミティブ型が使えない。
● データの追加は、
Seito.add(10);
コレクション(ArrayList)クラス
● データの取得
int temp = Seito.get(0);
● 要素数の取得
int count = Seito.size();
● 要素の検索
int index = Seito.size(100);
● 要素のさくじょ
Seito.remove(1); // 任意の場所
Seito.clear(); // 全ての要素のクリア
● ソート
Collections.sort(Seito);
● コード例ArrayList<Integer> Seito = new ArrayList<Integer>();
Seito.add(300);
Seito.add(250);
Seito.add(400);
Seito.add(100);
Collections.sort(Seito);
// Seito.remove(2);
// Seito.clear();
for(int i=0;i<Seito.size();i++) {
System.out.println(Seito.get(i));
}
Stringクラス
● 文字列を扱うクラス
String temp = “ab,cde,fg”;● 長さを取得
int len = temp.length();● 文字列の検索
int posi = temp.indexOf(“cde”);● 文字列の分割
String temp2[] = temp.split(“,”);
● コード例
String aaa = "ab,cde,fg";
System.out.println(aaa.length());
System.out.println(aaa.indexOf("cde"));
String abc[] = aaa.split(",");
for(int i=0;i<abc.length;i++) {
System.out.println(abc[i]);
}
ここまでの復習
● 課題のコードは、以下のURLのExercise01です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
Androidアプリの開発
● ここから、Androidアプリの開発に入ります。
● まず、動作確認のために作成したAndroidアプリで生成されたファイル、フォルダを見ていきます。
生成されたファイルについて
● 生成されたファイル、フォルダの中で、よく使うものに限って、説明します。
● srcフォルダ
Androidアプリを作成するJavaのコードがある場所
● resフォルダ
レイアウトファイル、アイコンなどのリソースがある場所
● AndroidMnifes.xml
アプリの設定を決めるファイル
とりあえず、動かしたい
● 主要コンポートの説明の前に、動かしている実感が湧くアプリを書いてみましょう。
● モチベーションを維持するために、とりあえず動してみます。
● プロジェクトの作成
Androidアプリケーション・プロジェクトを選択
● 次のサンプルコードは、以下のURLのSample10です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
新規Androidアプリケーション
アプリケーション名、プロジェクト名、パッケージ名は、好きな名称をつけてください。
● 最小必須SDKを、API 14
Android4.0(IceCreamSandwich)に設定。
● テーマをNoneに設定。
● それ以外は、初期値のまま完了まで進んでください。
*最小必須SDKを、API 14したのは、余分なコードが作成されないようにするためです。
余分なコードを消す
● onCreateOptionsMenu()を削除
● onOptionsItemSelected()を削除● class PlaceholderFragment()を削除● if (savedInstanceState == null){のブロックを削除
● setContentView()の引数をnullに。
ビルドが通ることを確認してください。
*このまま実行しても、動作しません。
Viewクラスの作成
● クラスの作成機能を使って、Viewクラスを作成します。
● クラス名は、「SampleView」としておいてください。
名前に意味はありません。説明をしやすくするためです。
● スーパークラスをandroid.view.Viewにしてください。(ここは、重要です)
● これで、作成してください。
SampleViewクラス
● SampleViewメソッドを追記してください。
public SampleView(Context context){
super(context);
setBackgroundColor(Color.WHITE);
}● クラスと同じメソッドをコストラクタと言います。
SampleViewクラス
● onDraw()メソッドをオーバーライドしてください。
@Override
public void onDraw(Canvas canvas){
canvas.drawText("Hello", 100, 100, paint);
}● フィールドに、次の変数を定義してください。
private Paint paint = new Paint();
ビルドと実行
● それでは、再度ビルド、実行してください。
● 「Hello」と表示されたはずです。
● これでは、コンソールと変わらないので、次は、● テキスト表示の部分を図形に変えて見ます。
● canvas.drawText()を削除。
● canvas.drawCircle(100,100,5,paint);を記述。
● 座標(100,100)に円の描画を実施
● 実行して、円が表示されることを確認してください。
描画を拡張
● 円の色を変えてみます。
● canvas.drawCircle()の前に、
paint.setColor(Color.RED);を記述
● 実行して、赤い円が描かれることを確認してください。
*座標の原点は、左上です。
タッチイベントの取得
● onTouchEvent()をオーバーライドしてください
@Override
public boolean onTouchEvent(MotionEvent event)
{
}● ビルドが通ることを確認
タッチイベント動作確認
● タッチイベントの動作確認をします。
onTouchEvent()内に、
Toast.makeText(getContext(), "Touchされました", Toast.LENGTH_SHORT).show();
を記述してください。● 実行してください。タッチするたびに、画面に
「Touchされました」と表示されたと思います。
円がタッチされたら、色を変える
● タッチイベントの判定
public boolean onTouchEvent(MotionEvent event){
int action = event.getAction();
if((action & MotionEvent.ACTION_MASK)
== MotionEvent.ACTION_DOWN){
// タッチされたことを判定
}
}
座標を取得
// タッチされた座標
int ex = (int)event.getX();
int ey = (int)event.getY();
円と点の衝突判定
円(bx,by,R)点(ex,ey)
R:円の半径
● if((bx - ex)*(bx - ex)+(by - ey)*(by - ey) <= R*R){
// 衝突
}
円の色を変える
● colorというフィールドを定義
● color = Color.RED; // Color.BLUE● 円を描く際に
paint.setColor(color);● で色指定すること
● colorをセットしたら、
invalidate();を呼んでおくこと。再描画させるため
タイマーで、円を移動
● MainActivityのフィールドに
private Handler handler = new Handler();
を記述。
● onCreate()でタイマー作成
タイマー作成
Timer timer = new Timer(false);
timer.schedule(new TimerTask(){
public void run(){
handler.post(new Runnable(){
public void run(){
view.invalidate();
}
});
}
},0,30); // 30msec毎に、viewを再描画させる
● このコードが理解できたら、脱初心者です。
● キーワード(抽象クラス、匿名クラス、インタフェース、スレッド間通信)
onDraw()で座標更新
● 左端、右端、上端、下端に来たときの処理を記述。
● 例)左端の処理 bx:円の中心 dx:移動量
(正で右へ、負で左へ移動)
if (bx < 0 ) {
dx = 2;
}
bx = bx + dx; // 座標更新
線と矩形描画
● 線の描画
● canvas.drawLine(x1,y1,x2,y2,paint);● x1,y1 始点座標 x2,y2 終点座標
● 矩形描画
● canvas.drawRect(x1,y1,x2,y2,paint);● x1,y1 左上座標 x2,y2 右下座標
画像描画
● フィールドにビットマップ保存用の変数を定義
● private Bitmap item;● viewのコンストラクタで、ビットマップを読み込む
● Resources res = context.getResources();● item = BitmapFactory.decodeResource(res,
R.drawable.ic_launcher);● onDraw()で描画
● canvas.drawBitmap(item, 100, 200, null);
復習
● ここで、Javaの復習
● 継承、コンストラクタ、オーバーロード、
オーバーライド、superなどの要素が出てきたので、コンソールアプリを使って、ひと通り説明します。
応用
● ここまでの要素を組み合わせれば、ブロック崩し、インベーダー、テトリス、オセロなどが作成可能です。
● 何でも良いので、作ってみましょう。
● 次は、Androidの主要コンポーネントについて
● アプリの作成方法は、レイアウトファイルを主体としたやり方です。
主要コンポーネント
● アプリの主要な機能を実現するためのコンポーネント
● Activity ・・・ ユーザーインターフェース
● Intent ・・・ コンポーネント間通信
● Content Provider ・・・ データアクセス
● Broadcast Receiver ・・・ イベントトリガー
● Service ・・・ バックグランド実行
*今回の勉強会では、ActivityとIntentを使います。
Activity(アクティビティ)
● 画面の元になるコンポーネント
● アクティビティの上にボタン、チェックボックスなどの部品をを配置して画面を作成する
● 基本的に1画面は、1つのアクティビティで構成される。
● アクティビティは、実行中、一時停止などの状態を持つ。(ライフサイクル)
● 次のサンプルコードは、以下のURLのSample11/12です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
View(ボタン)を配置
● アクティビティにViewを配置する
まず、ボタンを配置してみる
● GUIデザイナで、ボタンを配置
● XMLファイルに書かれる
● コードでは、XMLファイルを指定することで、Viewを指定することができる。
ボタンを使うコード
● コード上でボタンを呼び出す処理
findViewById()● 取得したオブジェクトに設定を行う● イベントを設定
トーストを表示するコード
*トースト、画面上に短い間メッセージを表示する仕組み。警告メッセージなどを表示する場合などに使う。
ログ出力
● コードが複雑になってくると、プログラムが思い通り動いているか、検証したくなります。
● 毎回、デバッガで動かすのも面倒なので、よく使うテクニックとして、気になる箇所にログを仕込みます。
● Log.d("TAG", "message");● ログレベルによって、「v/e/d/w/i」を使い分ける
● ログは、Logcatというツールで見ることができます。
テキストViewを配置
● GUIデザイナで、テキストViewを配置
● ボタンが押されたイベントに、テキストViewに文字を出力するコードを記述
エディットテキストを配置
● GUIデザイナでエディットテキストを配置
● ボタンクリックのイベントでエディットテキストから
文字列を読んで、テキストViewに出力するコードを書いてみる
Activityのライフサイクル
ライフサイクルに関連するメソッド
メソッド名 呼ばれるタイミング
● onCreate() Activityが初めて作られたとき
● onStart() Activityが開始されたとき
● onResume() Activityが表示されたとき
● onRestart() Activityが再度開始されたとき
● onPause() 別のActivityが表示されるとき
● onStop() Activityが表示されなくなったとき
● onDestroy() Activityがメモリから開放される直前
ライフサイクルの確認
● ライフサイクルに関連するメソッドに、ログを仕込んだアプリを使って、どのような順番で呼ばれのか、調べてみましょう。
● Androidで吐き出すログは、logcatというツールで見ることができます。開発環境に含まれています。
● このサンプルコードは、以下のURLのSample13です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
Intent(インテント)
● コンポーネント間通信の仕組み● ここでいうコンポーネントとは、アクティビィティ、
サービス、ブロードキャストレシーバ。● 具体例
アクティビィティ1からアクティビィティ2を起動(画面遷移)
外部アプリのメールソフトを起動、ウェブブラウザを起動など。
Intent(インテント)
● コンポーネント間通信の仕組み● ここでいうコンポーネントとは、アクティビィティ、
サービス、ブロードキャストレシーバ。● 具体例
アクティビィティ1からアクティビィティ2を起動(画面遷移)
外部アプリのメールソフトを起動、ウェブブラウザを起動など。
Intentを試す
● ブラウザ起動
Intent intent = null;
intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("http://google.com/"));
startActivity(intent);● このサンプルコードは、以下のURLのSample11/12です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
Intentを試す
● メール送信Uri uri=Uri.parse("mailto:test@test.com");
Intent intent=new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra(Intent.EXTRA_SUBJECT,"タイトル");
intent.putExtra(Intent.EXTRA_TEXT,"本文");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
● このサンプルコードは、以下のURLのSample14です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
画面遷移
● アクティビティを追加して、画面遷移を実現
1)クラスの追加(Activityを継承)
2)マニュフェストに新たなアクティビティを追記
<activity android:name=".SubActivity"
android:label="@string/app_name">
</activity>
*忘れるとアプリが落ちるので、注意。
3)メイン画面から、ボタンクリックで画面遷移するようにコードを記述。
● このサンプルコードは、以下のURLのSample15です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
位置情報の取得
● マニフェストにパーミンション記述が必要<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
● wifiで位置情報を取得するには、次が必要<uses-permission android:name="android.permission.INTERNET" />
● エミュレータで、擬似GPSを使うには、次が必要<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
● このサンプルコードは、以下のURLのSample16です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
LocationManager
private LocationManager locationManager = null;
locationManager = (LocationManager)getSystemService(LOCATION_SERVICE);
● //wifiから、位置情報取得
locationManager.requestLocationUpdates(
LocationManager.NETWORK_PROVIDER, 1000L, 0,mLocationListener);
● //GPSから、位置情報取得
locationManager.requestLocationUpdates(
LocationManager.GPS_PROVIDER, 1000L, 0,mLocationListener);
LocationListener
● LocationListenerを生成
private LocationListener mLocationListener = new LocationListener(){
● LocationListenerのメソッドを記述
● onStatusChanged/onProviderEnabled/onProviderDisabledは、空。
● onLocationChangedで、位置情報を取得
緯度経度の取得
● onLocationChangedで緯度経度を取得
String latitude = Double.toString(location.getLatitude());
String longitude = Double.toString(location.getLongitude());
緯度経度をブラウザへ
● Yhoo地図を利用(「Yahoo!地図 パラメータ」で検索)
String urlStrng = "http://map.yahoo.co.jp/maps?type=scroll&pointer=on&sc=2&lat=";
urlStrng += latitude;
urlStrng += "&lon=";
urlStrng += longitude;
Intent intent = null;
intent = new Intent(Intent.ACTION_VIEW,Uri.parse(urlStrng));
緯度経度をメールへ
Uri uri=Uri.parse("mailto:test@test.com");
Intent intent=new Intent(Intent.ACTION_SENDTO,uri);
intent.putExtra(Intent.EXTRA_SUBJECT,"ここにいます");
*全ページで作成したURLを本文にいれるだけ。
intent.putExtra(Intent.EXTRA_TEXT,urlStrng);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
装飾(背景を画像に)
● resのdrawableフォルダに、画像を追加
● "background.png"● RelativeLayoutの属性に以下を追加
● android:background="@drawable/background"
ボタンに画像をつける
● 画像はアイコンを利用
● Buttonの属性に以下を追加
● android:drawableLeft="@drawable/ic_launcher"
位置情報を使う
● 位置情報をつかって、最寄り駅の検索をしてみる
● Web上には、いろんな情報を取得できるサービスがあります。
● Webにアクセスして情報を取得すると更におもしろいことができるようになります。
● 今回は、緯度経度から最寄り駅を検索するサービスを使ってみます。
● http://map.simpleapi.net/
位置情報を使う
● 位置情報をつかって、最寄り駅の検索をしてみる
● Web上には、いろんな情報を取得できるサービスがあります。
● Webにアクセスして情報を取得すると更におもしろいことができるようになります。
● 今回は、緯度経度から最寄り駅を検索するサービスを使ってみます。
● http://map.simpleapi.net/
Webにアクセスするには
● HttpClient/HttpGet/HttpResponseなどのクラスを使ってアクセスします。
● 問題なのは、Androidの規約で、Webアクセスするコードは、バックグランドで動かす必要があります。
● バックグランドは、AsyncTaskというクラスを使って実現します。これ以外にも、バックグランド処理の実現方法は、ありますが、この方法が一番手頃なので、これを紹介することにします。
● このサンプルコードは、以下のURLのSample17です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
AsyncTaskの使い方
● Activityを継承したクラスの内部で、AsyncTaskクラスを継承したクラスを宣言します。protected class Task extends AsyncTask<String,String,String>
● Taskクラスの中で、doInBackgroundとonPostExecuteをオーバーライドします。
● doInBackgroundメソッドには、実際にバックグランドで実行する処理を書きます。今回は、Webアクセスの処理。
● onPostExecuteは、doInBackgroundから渡された実行結果をUIに表示する処理を書きます。
● ここが重要です。onPostExecuteは、UIスレッドで動作しているので、UIアクセスが可能。
AsyncTaskの使い方
● Activityを継承したクラスの内部で、AsyncTaskクラスを継承したクラスを宣言します。protected class Task extends AsyncTask<String,String,String>
● Taskクラスの中で、doInBackgroundとonPostExecuteをオーバーライドします。
● doInBackgroundメソッドには、実際にバックグランドで実行する処理を書きます。今回は、Webアクセスの処理。
● onPostExecuteは、doInBackgroundから渡された実行結果をUIに表示する処理を書きます。
● ここが重要です。onPostExecuteは、UIスレッドで動作しているので、UIアクセスが可能。
Webアクセスのコード
● 手順は、下記のようなコードでアクセス可能です
● 実際には、エラー処理などが入るのでもう少し複雑です。
● 実際のコードは、Eclipse上で説明します。
HttpClient client = new DefaultHttpClient();
HttpGet get = new HttpGet(URL);
HttpResponse res = client.execute(get);
StatusLine statusLine = response.getStatusLine();
byte[] result = EntityUtils.toByteArray(res.getEntity());
String data = new String(result, "UTF-8");
JSONを使う
● Webサービスは、JSONというデータ形式でデータを返してくることが多いです。今回、使う最寄り駅検索のサービスもJSONです。
● でも、JSONを扱うクラスがちゃんと用意されているので、簡単に使えます。JSONObject。JSONObject jsonObj = new JSONObject(JSON文字列);
● のように記述すると、JSONObject生成されます。
● そこから、データを抜き出すことになります。
実際のコードは、Eclipse上で説明します。
(面倒です。データ構造をちゃんと見極めることが重要)
最寄り駅検索完成
● 最寄り駅情報をJSONから取得できたら、後は、それをUI上のTextViewに書いてやれば、完成です。
● JSONを取得する部分は、先ほど出てきたonPostExecuteの中に記述します。
理由は、データを抜き出した後で、TextViewにアクセスする必要があるからです。
● この機能を位置情報を取得するコードと合わせるとここにいますの情報に最寄り駅も入れることができるようになります。
● 実は、Sample16には、天気を取得したり、現在住所を取得するようなコードが書いてあります。
更にブラッシュアップ
● 見た目も、機能もそれなりに整ってきたのですが、更に本格的なアプリに近づけます。
● 何が問題かというと、メールアドレスが直接書かれているので、送り先が書きかえできないのが欠点です。
● これを解消するために、アプリ内にメールアドレスを保存する機能をつけます。
● プリファレンス(SharedPreferences)を使います。
● このサンプルコードは、以下のURLのSample18です。
https://github.com/kami256/LearningAndroid/tree/master/LearningAndroid
SharedPreferences
● SharedPreferencesをフィールドに宣言。(sharedPref)
● onCreateで、インスタンスを取得
sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
● 読む場合
sharedPref.getString("mailaddress", ""))
● 書く場合
Editor editor = sharedPref.edit();
editor.putString("mailaddress", "書き込むデータ" );
editor.commit();
PreferenceActivity
● これを継承したクラス(Activity)を使うと、設定画面が簡単に作成できます。
● 必要なメソッドは、onCreateのみ作成
● レイアウト用のXMLが必要
● 新たなActivityを追加するので、マニフェストファイルに追記が必要
詳細は、Eclipse上で説明します
アプリ作成のまとめ
● 位置情報取得(Sample16)● 最寄り駅取得(Sample17)
● プリファレンス(Sample18)
これらの機能から必要なものを組み合わせて、最終形に仕上げる。
Github
● ソーシャルコーディング● コードを公開するための仕組み● 有料なら、公開しないプライベートでの使用も可
能。
● Gitは、Githubを使うためのソフトウェアであり、ソースコードのバージョン管理のために作られたものです。
● その機能を利用して、外部へソースコードを公開する仕組みをWeb上に展開したがGithub。
Githubで開発されているOSS
● Ruby On Rails● node.js● jQuery● Symfony2● Bootstrap
*有名なOSSが多く利用している
Gihubの利用方法
● まず、GitがPCにインストールされていること
● 次に、Githubにアカウント作成する必要があります
http://github.com にアクセス
[Sign up for Github]をクリック
● Step1
Username・Email Address・Passwordを入力。
[Create an account]をクリック
*Usernameが、公開される名前になります。
Githubの登録
● Step2
フリープランが選択されていることを確認して、
[Finish sign up] をクリックします。
● Step3
ダッシュボード画面が表示されていれば、完了
SSH Keyの設定
● ssh-keygenというコマンドでSSH Keyを作成する
生成されたid_rsa.pubの中身を利用。
● Githubの設定ボタン(Account Setting)(右上)をクリック
● 画面が表示されたら、メニューから、SSH Keysを選択
● Add SSH Keyをクリック
Titleを入力してから、id_rsa.pubの中身をコピーして、Keyに貼り付ける。その後、Add Keyをクリック
確認・ポイント
● SSH Keyの登録が成功すると、登録したメールアドレスに、登録成功のメールが届きます
● Windowsの場合は、Gitと一緒にインストールされたSSH-Keygenを使うと良いです。
***これで、準備が整いました***
リポジトリの作成
● 右上の+記号の横をクリックするとメニューが● 表示されるので、その中から、
● [New Repository]を選択● Repository Nameを入力したら
● Initialize this repository with a READMEにチェック
● [Create Repository]をクリック
リポジトリにアクセス
● https://github.com/ユーザー名/リポジトリ名
で作成したリポジトリにアクセスできます。
● 作成したリポジトリをcloneする
git clone https://github.com/ユーザー名/リポジトリ名.git
*cloneするリポジトリのURLは、GitHubのリポジトリの上記の画面の右下にある[HTTPS clone URL]で参照できます。
ファイルを追加
● cloneされたディレクトリに移動
● 追加するファイルを置く(作成)(例:test.txt)● git add test.txt● git commit -m "File Add"
*まだ、リモートには、登録されていない
● git push
ユーザー名とパスワードを入力して完了● これで、ソースを公開することができます
top related