• Save
Androidアプリケーション開発入門
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Androidアプリケーション開発入門

  • 2,405 views
Uploaded on

OESF公認 ...

OESF公認
Androidアプリケーション開発入門
公式トレーニングテキスト (日本語)

Contributed by:
【作成】ウルシステムズ株式会社
【修正】株式会社リーディング・エッジ社
    
【ご注意】
本テキストは、Creative Commons License BY-NC-SA 4.0のもとで提供されます。OESF会員またはコンソーシアムメンバーでない場合、本編の改変の有無にかかわらず、いかなる形態でも商用目的での利用は禁止されています。

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
2,405
On Slideshare
1,746
From Embeds
659
Number of Embeds
3

Actions

Shares
Downloads
0
Comments
0
Likes
9

Embeds 659

http://oesf-edu.com 652
http://s.deeeki.com 6
http://mym.corp.yahoo.co.jp 1

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Androidアプリケーション開発 入門トレーニング This material is licensed under the Creative Commons License BY-NC-SA 4.0. 1 Ver2.00(03)
  • 2. テキストのご利用に関して ・本コースのテキストは、Creative Commons License BY-NC-SA 4.0のもとで提供されます。OESF会員またはコンソーシアムメン バーでない限り、改変の有無にかかわらず、いかなる形態において も商用目的での利用は禁止されています。 ・本教育プログラムは、その中で提供される教材全てを含め、OESF からのいかなる保証もなしに提供されます。OESFは、本コースの 内容またはコースの詳細な情報を使用することに起因して、または 誤って使用することに起因して何らかの障害や法的な行為が生じて も、いかなる責任も負いません。 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 2
  • 3. トレーニングの目的 • Android上で動作するアプリケーションの開発に 必要な知識を身につける – – – – Androidが提供する機能 開発環境 開発ツールの使用方法 アプリケーションの実行方法、デバッグ方法 • 演習を通して、アプリケーション開発を体験する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 3
  • 4. トレーニングスケジュール • 1日目 – – – – 1章 Androidとは 2章 Androidアプリケーションのアーキテクチャ 3章 開発環境の準備 4章 チュートリアル • 2日目 – 5章 演習 – 6章 トレーニングのまとめ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 4
  • 5. 受講するに当たって必要なスキル • Java言語の経験がある事 – 2日目の演習では、実際にJavaでプログラミングを行い ます – 基本的なJavaの言語仕様について理解があれば問題あ りません • Eclipseを使用した経験がある事 – 演習ではEclipseを使用してプログラミングを実施しま す This material is licensed under the Creative Commons License BY-NC-SA 4.0. 5
  • 6. 1. Androidとは This material is licensed under the Creative Commons License BY-NC-SA 4.0. 6
  • 7. 1章の概要 • • • • • • Androidとは? Androidが注目される理由 Androidで何ができるの? 技術的側面からみたAndroid アプリケーション開発に必要な環境 アプリケーションの配布方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 7
  • 8. 1.1.Androidとは? • Androidとは – 携帯端末用プラットフォームである – 主に携帯電話のプラットフォームとして利用されてい る • Androidの歴史 日付 内容 2003年10月 Android社発足 2005年 8月 GoogleがAndroid社を買収 2007年11月 Open Handset Allience(OHA)が発足 開発ツール Android SDK 1.0 リリース 2008年10月 世界初のAndroid搭載スマートフォン 「T-Mobile G1」 発売 2009年 4月 開発ツール Android SDK 1.5r1 リリース 2009年 5月 開発ツール Android SDK 1.5r2 リリース 2009年 7月 NTTドコモより、日本国内初のAndroid携帯 「HT-03A」発売 開発ツール Android SDK 1.5r3 発表 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 8
  • 9. 1.1.Androidとは? 続き 日付 内容 2009年 9月 開発ツール Android SDK 1.6 発表 2009年10月 開発ツール Android SDK 2.0 発表 2010年 1月 開発ツール Android SDK 2.1 発表 2010年 5月 開発ツール Android SDK 2.2 発表 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 9
  • 10. 1.1.Androidとは? • Androidに関する主な組織 団体名 Open Handset Alliance (OHA) Open Embeded Software Foundation (OESF) 説明 • Androidの普及促進を目的に設立された団体。対応 端末・ソフトウェアの開発、サービスの普及活動 を行う • Androidの仕様策定、成果物の管理はOHAによって 行われている • T-mobile(米)、Motorola(米)、NTTドコモ(日) 等、71 社が参加(2010年5月現在) • http://www.openhandsetalliance.com/index.html • Androidをベースにした組み込みシステムの共通フ レームワーク、プラットフォームの開発と普及を 目的として設立された団体 • 事業分野に応じて組織されたワーキンググループ を中心に活動をしている • 75社が参加(2010年5月現在) This • http://www.oesf.jp/ material is licensed under the Creative 10 Commons License BY-NC-SA 4.0.
  • 11. 1.2.Androidが注目される理由 • 今、Androidが注目されている – どれくらい注目されているか? • Androidを搭載するハードウェアが続々発表されている ハードウェア 概要 携帯電話 2009年5月 NTTドコモ HT-03A(HTC Magic)発売 2009年6月 HTC(台) HTC Hero発表 2009年7月 T-Mobile myTouch 3G発売 2010年1月 Google NEXUS ONE発表 2010年4月 NTTドコモ Xperia発表 メディアプレイヤ クリエイティブ Zii EGGを発表 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 11
  • 12. 1.2.Androidが注目される理由 • 今、Androidが注目されている – どれくらい注目されているか? • “Android”のWeb検索件数が2008年後半から増加している (Google Trend調べ) ■主な出来事 A: T-Mobile G1発表 Android Marketオープン B: OHAがAndroid SDK 2.0リリース C: Google Nexus One発表 D: ソニーエリクソン Xperia X10の 小型版発表 E: マイクロソフトがAndroidを 特許侵害と非難 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 12
  • 13. 1.2.Androidが注目される理由 • Androidが注目される4つの理由 1. Androidは無償で使用できる為、プラットフォーム開 発コストの削減が期待されている 2. 開発ツール、技術ドキュメント、ソースコードを誰 でも無償で入手する事ができる 3. Java SEを知っていれば学習コストが低い 4. 携帯電話以外の組込み開発分野へ展開されている This material is licensed under the Creative Commons License BY-NC-SA 4.0. 13
  • 14. 1.2.Androidが注目される理由 • Androidは無償で使用できる為、プラットフォー ム開発コストの削減が期待されている – Androidをプラットフォームに採用する事で、プラット フォーム開発費の削減が期待されている ※ドライバ等のハードウェアに依存するソフトウェアは開発が必要 削減されるコス ト アプリケーション開発費 プラットフォーム開発費 ハードウェア開発費 Android採用前 Android採用後 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 14
  • 15. 1.2.Androidが注目される理由 • 開発ツール、技術ドキュメント、ソースコードを 誰でも無償で入手する事ができる – AndroidはApache License 2.0ライセンスの下、ドキュメ ント、プログラムソースがオープンに公開されている • ドライバ、GoogleMapsAPIのようなプロプリエタリなモジュー ルは、ソースの提供はされていない – 開発ツールはOHAより無償で入手できる This material is licensed under the Creative Commons License BY-NC-SA 4.0. 15
  • 16. 1.2.Androidが注目される理由 • Java SEを知っていれば学習コストが低い – AndroidアプリケーションはJava SEで開発できる為、 Javaの言語仕様を知っていれば、開発言語に関する学 習は必要ない – AndroidアプリケーションはEclipseを使用できる為、 Eclipseを使用したことのある開発者であれば開発ツー ルの使用方法を学習するコストは低い This material is licensed under the Creative Commons License BY-NC-SA 4.0. 16
  • 17. 1.2.Androidが注目される理由 • 携帯電話以外の組込み開発分野へ展開されている – 携帯電話以外の機器での利用が研究開発されている • 携帯電話以外にAndroidが移植されているハードウェア – ネットブック – ナビゲーションシステム(カーナビ等) – TVレコーダ(デジタル放送録画・再生) – その他デジタル家電 » 組込みシステム開発技術展(ESEC2010)で多数展示 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 17
  • 18. 1.3.Androidで何ができるの? • 開発者はAndroidが提供する以下の機能を利用し たアプリケーションを作成する事ができる – フルブラウザによるWebサイトの閲覧 – 2D/3Dグラフィックスの描画 – 音声、映像、静止画メディアの表示・再生 • 対応フォーマット(MPEG4、H.264、MP3、AAC、AMR、JPG、PNG、 GIF) – – – – – – GSM(2G)、 3Gによる音声通話 Bluetooth、EDGE、WiFiによるデータ通信 カメラ(静止画/動画) GPS 各種センサー SQLiteによるデータストレージ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 18
  • 19. 1.3.Androidで何ができるの? • Androidで制御可能なセンサー装置 # センサー名 概要 1 加速度センサー 加速度を検知する 2 傾きセンサー 方位角、傾斜角(水平状態の上下傾き)、回転角 (水平状態の左右傾き)を検知する 3 温度センサー 温度を検知する 4 磁気センサー 磁場を検知する 5 明るさセンサー 明るさを検知する 6 接近センサー 対象物との距離を検知する 7 ジャイロスコープ 角速度を検知する 8 圧力センサー 実機に対してかけられた圧力を検知する ※センサーの利用にはハードウェアの対応が必要 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 19
  • 20. 1.3.Androidで何ができるの? • Androidアプリケーションの紹介 Webブラウザ 電話 This material is licensed under the Creative Commons License BY-NC-SA 4.0. Google Maps 20
  • 21. 1.3.Androidで何ができるの? – Webサービスを利用したもの 1. 天気情報表示 – Google Weather APIを使用して天気 情報を表示 ① – 日本語入力(IME) 2. simeji – フリック入力を可能にするソフトウ ェアキーボード ※ フリック入力とは、ソフトウェアキーボードの キーを スライドすることで入力文字を選択する入力方 法のこと This material is licensed under the Creative Commons License BY-NC-SA 4.0. ② 21
  • 22. 1.3.Androidで何ができるの? – センサーを利用したもの 3. Google Sky Map – 4. 傾きセンサー、磁気センサーを 使用して端末を向けている方向 の星空を表示 Labyrinth Lite – 傾きセンサーを使用したゲーム ③ – カメラを利用したもの 5. Layer – カメラで写した実際の映像上に デジタル情報を表示するブラウ ザ ④ This material is licensed under the Creative Commons License BY-NC-SA 4.0. ⑤ 22
  • 23. 1.4.技術的側面から見たAndroid • Androidアプリケーションが動作する環境 – AndroidアプリケーションはAndroidランタイムという仮 想マシンの上で動作する – Androidランタイムの実行基盤としてLinuxを採用してい る為、アプリケーションはLinux上で動作している ソフトウェア(Androidプラットフォーム) アプリケーション アプリケーション Androidランタイム Linuxカーネル ハードウェア This material is licensed under the Creative Commons License BY-NC-SA 4.0. 23
  • 24. 1.4.技術的側面から見たAndroid • Androidは5つの要素で構成されている Androidの構成要素 アプリ ケーショ ン ⑤ Home アド レス 電話 アプリ ケー ショ ン ブラウザ アプリ ケーショ ンフレームワーク ④ アクティ ビ ティ ウィ ウ ンド マネージャ コンテンツ プロバイダ ビュー システム 通知 マネージャ パッ ケージ マネージャ 電話 マネージャ リ ソース マネージャ 位置 マネージャ ラ ブラ イ リ ② サーフェ ス マネージャ メ ア ディ フ レームワーク SSL センサー マネージャ Androidラ イ ンタ ム libc SQLite OpenGL |ES FreeType WebKit SGL コア ライブラリ Dalvik VM Linuxカ ーネル ① ディ スプレイ ド ライバ Bluetooth ド ライバ カメ ラ ド ライバ フ ッ ラ シュメ モリ ド イ ラ バ バインダ ( IRC) キーパッ ド ド ライバ USBド ライバ WiFiド ライバ オーディ オ ド ライバ 電源管理 ハード ア ウェ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 24 ③
  • 25. 1.4.技術的側面から見たAndroid • 構成要素の概要 ①.Linuxカーネル • Linux 2.6をベースにAndroid用の変更を加えたLinuxカーネル • アプリケーションが動作する為に必要な機能を提供しており、ハード ウェアドライバを含んでいる ②.ライブラリ • C/C++で作成されたライブラリ – Webkit(Webブラウザ描画)、SQLite(データベース)、OpenGL/SE(3D描画)等 • アプリケーションが、アプリケーションフレームワーク経由で使用す る ③.Androidランタイム • Androidアプリケーションの実行環境 • Androidで使用するJavaのコアライブラリ、実行環境である仮想マシン (Dalvik VM)が含まれる This material is licensed under the Creative Commons License BY-NC-SA 4.0. 25
  • 26. 1.4.技術的側面から見たAndroid • 構成要素の概要 ④.アプリケーションフレームワーク • アプリケーションの動作やライブラリを使用する為に必要なJava API を提供する ⑤.アプリケーション • アプリケーションフレームワークを使用して開発されたAndroidアプ リケーション – 具体例として、電話、Webブラウザ、アドレス帳 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 26
  • 27. 1.4.技術的側面から見たAndroid • 携帯端末を想定した軽量な実行環境 – Dalvik仮想マシン(Dalvik VM) • メモリの少ない環境に最適化されたJava VM – Googleが独自開発した仮想マシン – メモリの少ない環境でも複数のアプリケーションを同時実行でき るように設計されている – Dalvik実行形式フォーマット(.dex) • Dalvik VMでは標準の.class、.jarを.dexに変換して実行 • .classに比べ、稼働時の使用メモリサイズが小さい Java VM .class Dalvik VM 変換 .dex .jar This material is licensed under the Creative Commons License BY-NC-SA 4.0. 27
  • 28. 1.4.技術的側面から見たAndroid – Dalvik VM と Java VM には互換性がない • 実行ファイルのバイナリ形式が異なる – Dalvik VM上では、.class、.jar形式のファイルは実行できない – Java VM上では、.dex形式のファイルは実行できない Java VM Dalvik VM .class .dex .jar This material is licensed under the Creative Commons License BY-NC-SA 4.0. 28
  • 29. 1.4.技術的側面から見たAndroid • 従来の携帯アプリケーションに比べて制限が少ない為、 PC上で動作するJavaアプリケーションに近い iアプリ(Doja-5.x)※1 Androidアプリケーション Javaのサポート Java ME Java SE アプリケーショ ン サイズ制限 1MB(機種により異なる) 特になし ヒープメモリ制 限 6MB~15MB(機種により異な る) 16MB(SDKの設定値)※2 通信制限 アプリケーションダウンロード 先以外通信不可 特になし HTTP通信サイズ 制限 リクエストボディ:80KB レスポンスボディ:150KB 特になし クッキー 2009年夏モデルより利用可 利用可 文字コード SJIS UTF-8 ※1 iアプリコンテンツ開発ガイド for DoJa-5.x/5.x LE~ 詳細編 ~ 第3.00版 ScratchPad 永続化方法 ファイル、SQLite ※2 SDKでのデフォルトの設定値となり、機種ごとに変更される場合がある。例えばNexus Oneは24MBである。 This material is licensed under the Creative 29 Commons License BY-NC-SA 4.0.
  • 30. 1.5. アプリケーション開発に必要な環 境 項目 必要な環境 OS Windows XP, Windows Vista(32 / 64 bit) Mac OS X 10.5.8以降(x86のみ) Linux(Ubuntu Hardy Herson にてテスト済) Java SDK Java SDK 5, Java SDK 6 Android開発ツール Android SDK 統合開発環境 Eclipse 3.4 (Ganymede), 3.5 (Galileo), Android Development Tools(ADT) Plug-in テキストベース 開発環境 Apache Ant(Windows版は1.7, Mac/Linux版は1.6.5以降)  実機は必須ではない。開発用にエミュレータが用意されている  エミュレータではセンサー等、一部利用できないものがある 詳細は http://developer.android.com/intl/ja/sdk/requirements.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 30
  • 31. 1.6. アプリケーションの配布方法 • アプリケーションを配布する方法は大きく2つあ る – Android Marketから配布する方法 – Android Marketを使用せずに配布する方法 ※Android Marketとは? – Androidアプリケーションの配布・販売を目的としたサイト – Androidアプリケーションの配布には一般的な方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 31
  • 32. 1.6. アプリケーションの配布方法 • Android Marketから配布する方法 – 配布手順 1. Android Marketに開発者アカウント登録を行う – 開発者アカウントの登録には、Googleアカウントが必要 2. アプリケーションの電子証明書を作成する※1 – 証明書の作成にはKeytool(Java SDK同梱)※2を使用する 3. アプリケーションにデジタル署名する※1 – デジタル署名を行うにはjarsigner (Java SDK同梱)※2を使用する 4. Android Marketにアプリケーションをアップロードする ※1 Eclipseの機能で証明書の作成、署名を行うことができる ※2 各ツールの使用方法については、ツールのマニュアルを参照 – 必要なもの • Googleアカウント This material is licensed under the Creative Commons License BY-NC-SA 4.0. 32
  • 33. 1.6. アプリケーションの配布方法 • Android Marketから配布する方法 – Android Marketに開発者アカウントを登録する手順 1. 開発者登録サイトから、開発者プロフィールの登録を行う – 登録サイト » http://market.android.com/publish/signup – 入力するプロフィール項目 » » » » 2. 3. 名前 メールアドレス(Google アカウントが必要) WebサイトURL 電話番号 登録料($25)を支払う – 支払はGoogle Checkoutからクレジットカードでのみ可能 配布契約書に同意する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 33
  • 34. 1.6. アプリケーションの配布方法 • Android Marketを使用せずに配布する方法 – アプリケーションファイルを直接配布する • 配布例 – ホームページでファイルを配布する – CD、USBメモリ等でファイルを配布する – LAN環境等のネットワーク上でファイルを配布する • 配布手順 1. 2. 3. アプリケーションの電子証明書を作成する アプリケーションにデジタル署名する アプリケーションファイルを配布する • インストール方法 1. 2. Android端末でファイルをダウンロードしてインストールする パソコンとAndroid端末をUSB接続し、インストールコマンドを 使用してインストールする This material is licensed under the Creative Commons License BY-NC-SA 4.0. 34
  • 35. 1.6. アプリケーションの配布方法 • Android Marketを使用せずに配布する方法 – インストール方法① Android端末でアプリケーションファイルをダウンロードしてイン ストールする • 手順 1. Android端末のブラウザでアプリケーションファイルをダウンロー ドする 2. ダウンロード完了後、ダウンロード履歴からアプリケーションフ ァイルをクリックする 3. インストール確認画面から”Install”を押す This material is licensed under the Creative Commons License BY-NC-SA 4.0. 35
  • 36. 1.6. アプリケーションの配布方法 • Android Marketを使用せずに配布する方法 – インストール方法① ファイルをク リックする ダウンロード ファイルをク リックする Installボタンを クリックする 手順1 手順2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 手順3 36
  • 37. 1.6. アプリケーションの配布方法 • Android Marketを使用せずに配布する方法 – インストール方法② パソコンとAndroid端末をUSB接続し、インストールコマンドを使 用してインストールする • 手順 1. 2. パソコンとAndroid端末をUSBケーブルで接続する コマンドプロンプトを起動し、adb install コマンドを実行する >adb install <アプリケーションファイル名(.apk)> ■コマンドプロンプトの入力( C:Simeji3.0.6.apk )をUSB経由でインストール C:>adb install C:Simeji3.0.6.apk // ・・・ 手順1 596 KB/s (1413225 bytes in 2.312s) pkg: /data/local/tmp/Simeji3.0.6.apk Success // ・・・ 手順2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 37
  • 38. 2. Androidアプリケーションの アーキテクチャ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 38
  • 39. 2章の概要 • 主要コンポーネント • ライフサイクル • Androidのセキュリティ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 39
  • 40. 2.1.主要コンポーネント • アプリケーションの主要な機能を実現する為、 Androidにはコンポーネントが用意されている 一般的なアプリケーションの主要な機能 ユーザー インター フェース プロセス間 通信 Activity Intent 外部通信 ファイル アクセス バック グラウンド 実行 Content Provider Broadcast Receiver Service 実現 Androidの主要コンポーネント This material is licensed under the Creative Commons License BY-NC-SA 4.0. 40
  • 41. 2.1.主要コンポーネント • 基本となる5つのコンポーネント 1. 2. 3. 4. 5. アクティビティ(Activity) インテント(Intent) ブロードキャストレシーバ(Broadcast Receiver) サービス(Service) コンテントプロバイダ(Content Provider) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 41
  • 42. 2.1.1.アクティビティ • アクティビティとは? – Androidアプリケーションの画面は、アクティビティの 上にボタン、チェックボックス等の部品を配置し、画 面を作成する – 1画面は1つのアクティビティで構成する – アクティビティは実行中、一時停止といった状態を持 っている This material is licensed under the Creative Commons License BY-NC-SA 4.0. 42
  • 43. 2.1.1.アクティビティ • Androidアプリケーションの画面は、アクティビテ ィの上にボタン、チェックボックス等の部品を配 置し、画面を作成する ① ② 左図はアクティビティにビュー(ボタン)を配置 している 1. アクティビティ 2. ビュー(ボタン) 左図の画面は以下のような構成になっている 2.ビュー(ボタン) 1.アクティビティ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 43
  • 44. 2.1.1.アクティビティ • ユーザーの画面入力に応答する処理を作成する 事ができる – 画面にて操作の情報(例えばボタンをクリックした )は、ビューを通じてアクティビティに通知される – アクティビティでは通知に応答する処理を作成する 事ができる • ボタンがクリックされた時の例 3.ボタンがクリック時の処理を実 行 1.ボタンをク リック ボタン 2.通知 アクティビティ This material is licensed under the Creative Commons License BY-NC-SA 4.0. public void onClick(View view) { // 画面にメッセージを表示す る } 44
  • 45. 2.1.1.アクティビティ • 1画面は1つのアクティビティで構成する – 複数の画面を持つアプリケーションの場合、画面の数 だけアクティビティを持っている アプリケーション アプリケーション アクティビティ アクティビティ アクティビティ アクティビティ 1つの画面で構成されている アプリケーション 3つの画面で構成されている アプリケーション This material is licensed under the Creative Commons License BY-NC-SA 4.0. 45
  • 46. 2.1.1.アクティビティ • アクティビティが表示される仕組み – アクティビティは画面に1つだけ表示される • Androidアプリケーションは、複数のアクティビティを持って いても、表示できるアクティビティは1つだけである • 新しいアクティビティを表示する場合、前のアクティビティは 隠され、新しいアクティビティが上に表示される Activity"A"が画面に表示 Activity"B"が画面に表示 Activity"C"が画面に表示 画面"B"に遷移 画面"C"に遷移 画面"A"に戻る 画面"B"に戻る This material is licensed under the Creative Commons License BY-NC-SA 4.0. 46
  • 47. 2.1.1.アクティビティ • アクティビティの状態は複数あり、操作により状態が変 化する • アクティビティの状態は3種類定義されている 1. フォアグラウンド状態 • アクティビティが表示されていて、カーソルがあたっている状態 2. バックグラウンド状態 • アクティビティが別のアクティビティによって隠されている状態 3. ビジブル状態 • アクティビティではない画面(ダイアログ等)が表示されて、アクティビティがカーソ ルを失っている状態(アクティビティはダイアログ越しに表示されている) 画面"B"に遷移 Dialog 1.フォ アグラ ウンド 状態 画面"A"に戻る 2.バッ クグラ ウンド 状態 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 3.ビジブル状態 47
  • 48. 2.1.1.アクティビティ • 画面の種類に応じて、アクティビティが用意され ている # 作成する画面 – アクティビティの一例 使用するアクティビティクラス 1 単票画面 Activityクラス 2 一覧表示画面 ListActivityクラス 3 地図画面(Google Map) MapActivityクラス 1.単票画面(Activity使用) 2.一覧画面(ListActivity使用) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 3.地図画面(MapActivity使用) 48
  • 49. 2.1.2.ビュー • ビューとは? – ボタン、チェックボックス等の部品である – 複数のビューをまとめる機能を持つビューを、ビュー グループと呼ぶ • アクティビティ、ビュー、ビューグループの関係 ユーザーインターフェース View View ViewGroup View View ViewGroup Activity This material is licensed under the Creative Commons License BY-NC-SA 4.0. 49
  • 50. 2.1.2.ビュー • 代表的なビュー 概要 View名 TextView テキストを表示する Button 基本的な押しボタン EditText テキストの入力をする CheckBox ON/OFF状態をもつボタン Spinner リストから1つのアイテムを選択するボタ ン AnalogClock イメージ アナログ時計 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 50
  • 51. 2.1.2.ビュー • 代表的なビューグループ 名前 概要 LinearLayout • 水平方向、または垂直方向にビューを配置するビューグ ループ • 画面内に収まらない場合は、スクロールバーを表示 TableLayout • 格子状にビューを配置するビューグループ(HTMLのtableタ グに似ている) • 内部にTableRowを指定する TableRow • Table行の中にビューを配置するビューグループ ListView • 1列のリスト上にビューを配置するビューグループ • 画面内に収まらない場合は、スクロールバーを表示 TabHost • タブによって表示を切り替えるビューグループ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 51
  • 52. 2.1.2.ビュー • 独自のビューを作成できる(カスタムビュー) – カスタムビューは3種類の方法で作成できる • 既存のビューを拡張して作成する – 既存ビューに機能追加したい場合に有効な手段 • 基底クラス(android.view.View)を継承して作成する – まったく新しいビューを作成したい場合にとる手段 – 最も自由にビューの開発が可能 – 一から実装になる為、基底クラスに関する深い知識が必要 • 既存のビューや、ビューグループを組み合わせて、新たなビ ューを作成する ■詳細はAndroid Developersの開発ガイドを参照 http://developer.android.com/intl/ja/guide/topics/ui/custom-components.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 52
  • 53. 2.1.3.インテント • インテントとは? – コンポーネント間で、処理の依頼や、メッセージをや りとりする為の仕組み • インテントを利用できるコンポーネントは、アクティビティ、 ブロードキャストレシーバ、サービス – インテントを利用する具体例 • アクティビティAからアクティビティBを起動する(画面遷移) • アドレス帳アプリケーションから電話をかけるアプリケーショ ンへ電話発信を依頼する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 53
  • 54. 2.1.3.インテント • インテントにより、コンポーネントを呼び出すに は、インテントに、呼び出し先のコンポーネント の情報を含めて、Androidに呼び出しを依頼する – コンポーネントAからコンポーネントBを呼び出す例 イ ンテント オブジェ クト を作成し 送信メ て、 ソッ を実行する ド "B"が起動する インテント • "B"を呼び出す イ ンテント イ ンテント Android This material is licensed under the Creative Commons License BY-NC-SA 4.0. 54
  • 55. 2.1.3.インテント • インテントの使い方には、明示的なインテントと 暗黙的なインテントの2つの使い方がある – 明示的なインテント • 呼び出し先のコンポーネントが明確な場合、コンポーネントを直接指 定して呼び出す方法。同一アプリケーション内のコンポーネントを呼 び出す場合に使用する(画面遷移等) – コンポーネントを指定して呼び出す例 アプリ ケーショ ン "B"が起動する インテント • "B"を呼び出す イ ンテント イ ンテント Android This material is licensed under the Creative Commons License BY-NC-SA 4.0. 55
  • 56. 2.1.3.インテント – 暗黙的なインテント • 呼び出し先のコンポーネントを指定せず、アクション(下図の例では ” 電話をかける”を指す)のみを指定する方法。主に他アプリケーショ ンのコンポーネントを呼び出す場合に使用する(別アプリケーション 画面等) • 起動するコンポーネントは各アプリケーションの設定情報からAndroid が決定する – アクションのみ指定して呼び出す例 アプリ ケーショ ン インテント 電話アプリ ケーショ ン • 電話番号xxx-xxxx-xxxx へ電話をかける イ ンテント イ ンテント に指定さ れたアクショ ン ( 電話をかける) から該当するアプ リ ケーショ 要素を選定する ン、 イ ンテント Androidがアプリ ケーショ ンが起動し 対象の要素 、 が実行さ れる Android This material is licensed under the Creative Commons License BY-NC-SA 4.0. 56
  • 57. 2.1.3.インテント – 暗黙的なインテント(続き) • 暗黙的なインテントを使用すると、Androidに含まれているア プリケーションと連携して、以下の事ができる – 電話アプリケーション » 指定した番号のダイヤルウィンドウを開く – アドレス帳アプリケーション » アドレス帳のリストを表示する » アドレス帳の中から1つのアドレス情報を表示する » 指定のアドレス情報を編集する – Webブラウザ » 指定したURLアドレスのWebサイトをブラウザで表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 57
  • 58. 2.1.3.インテント – 暗黙的なインテント(続き) • 暗黙的なインテントは、システム全体へ向けてブロードキャストする ことができる。 • ブロードキャストされるインテントは、「システムの起動完了」や「 電池残量の変化が発生した」等といった、状況の変化を伝える手段と して使用している • ブロードキャストされたインテントはブロードキャストレシーバのみ が受け取れるインテントとなる This material is licensed under the Creative Commons License BY-NC-SA 4.0. 58
  • 59. 2.1.4.ブロードキャストレシーバ • ブロードキャストレシーバとは? – ブロードキャストされたインテントに応答する為の仕 組みがブロードキャストレシーバである – ブロードキャストレシーバクラスを継承して独自のブ ロードキャストレシーバを作ることができる This material is licensed under the Creative Commons License BY-NC-SA 4.0. 59
  • 60. 2.1.4.ブロードキャストレシーバ • ブロードキャストレシーバの使用例 – Android端末起動時にメールをチェックする 1. ブロードキャストレシーバでAndroid端末起動完了時のブロ ードキャストインテントを受信する 2. ブロードキャストレシーバからメールチェックサービスを呼 び出す ※ ブロードキャストレシーバから直接メールチェック処理を実行する事も 可能だが、時間のかかる処理の場合はサービスを使用する方が効率が良 ② メールチェック メールチェッ い ① 起動完了メッセージ クサービス サービス実行 インテン ト ブロードキャス ト レシーバ インテン ト ブロードキャストインテント送 信 This material is licensed under the Creative Commons License BY-NC-SA 4.0. インテント送信 60
  • 61. 2.1.4.ブロードキャストレシーバ • ブロードキャストレシーバを使用する事で、シス テムの通知をきっかけとした処理を作ることがで きる # 状況 設定値 – Intentクラスの定数名 ブロードキャストされるインテントのアクション定義(一部抜粋 1 ACTION_BOOT_COMPLETED システムの起動が完 android.intent.action. BOOT_COMPLETED ) 了した 2 ACTION_TIME_CHANGED 時刻が設定された android.intent.action.TIME_SET 3 ACTION_TIMEZONE_CHANGED タイムゾーンが変更 された android.intent.action.TIMEZONE_CHANGED 4 ACTION_PACKAGE_ADDED アプリケーションが 新しくインストール された android.intent.action. PACKAGE_ADDED 5 ACTION_PACKAGE_REMOVED アプリケーションが アンインストールさ れた android.intent.action. PACKAGE_REMOVED 6 ACTION_BATTERY_CHANGED 充電中か否か、電池 android.intent.action. BATTERY_CHANGED ■その他の設定値は、以下URLを参照 残量が変更された http://developer.android.com/intl/ja/reference/android/content/Intent.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 61
  • 62. 2.1.5.サービス • サービスとは? – 独立したスレッドで処理を実行する為の仕組み – サービスはフォアグラウンドのアクティビティとは別スレッド で実行される。このため、他アクティビティによる割込みが発 生しても処理を続けることができる 音楽を再生(サービス未使用) 音楽を再生(サービス使用) 割込み 割込み メ ール受信により メ ール受信により 中断 中断 アクティ ビティ アクティ ビティ サービス開始 再生開始 サービス 音楽再生 中断に関係なく 処理を 完了 再生開始 アクティビティから直接音楽再生した場合と、サービ ス経由で音楽再生した場合で、メール受信によるアク ティビティの割込みが発生した時の動作の違い 音楽再生 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 62
  • 63. 2.1.5.サービス • サービスを使用したアプリケーションの紹介 – DroidTracker • GPSで取得した位置情報を、SMS、メール、twitterで送信する アプリケーション • GPS機能による位置情報の取得をサービスで処理 • SMS、メール、twitter送信機能をサービスで処理 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 63
  • 64. 2.1.6.コンテントプロバイダ • コンテントプロバイダとは? – アプリケーションが保持しているデータ※を他アプリ ケーションからアクセス(検索、追加、更新、削除) できるようにする仕組み – 具体的な例 • アプリケーションから通話ログを参照する • アプリケーションからブラウザのブックマークにWebサイトを 追加する ※ データとはアプリケーションが、ファイル、データベースに永続化している 情報を示す This material is licensed under the Creative Commons License BY-NC-SA 4.0. 64
  • 65. 2.1.6.コンテントプロバイダ • なぜ他アプリケーションのデータにアクセスする 為にコンテントプロバイダを使用するのか? – アプリケーションの保持するデータは外部アプリケー ションから直接アクセスできない セキュリティの壁 アプリケー ション 情報の取得 外部アプリ ケーション ストレージ 情報の編集 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 65
  • 66. 2.1.6.コンテントプロバイダ • 外部アプリケーションからのアクセスを実現する 仕組みとしてコンテントプロバイダがある セキュリティの壁 アプリケー ション コンテント プロバイダ 情報の取得 外部アプリ ケーション ストレージ 情報の編集 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 66
  • 67. 2.1.6.コンテントプロバイダ • コンテントプロバイダは、安全なアクセスを実 現する為に、インターフェースを取り決めてい る – 主なインターフェース # イベント名 内容 1 検索(query) データを検索し、 検索結果を返す インターフェー スが決まってい る コンテント プロバイダ query 2 追加(insert) データを追加す る insert 3 更新 (update) データを更新す る update 4 削除 (delete) データを削除す る 外部アプリ ケーション delete ■詳細はAndroid Developersの開発ガイドを参照 http://developer.android.com/intl/ja/reference/android/content/ContentProvider.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 67
  • 68. 2.1.6.コンテントプロバイダ • Androidにはコンテントプロバイダによって公開 されているデータがある – 公開されているデータ • • • • • • • 通話ログ コンタクトリスト ブラウザのブックマーク ブラウザの検索履歴 メディア内の画像 メディア内の映像 メディア内のオーディオ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 68
  • 69. 2.2. ライフサイクル • ライフサイクルとは? – アクティビティ、サービスにはオブジェクト生成~ 破棄に至るまでのライフサイクルが定義されている Activity起動 Service起動 フ ア ォ グラ ウンド 実行中 ・ "戻る"で元画面に復帰 ・ 他Activityの割込み ・ 端末スリ ープ ・ 長時間無操作状態が続いた ・ Activityがフォ アグラ ウンド に表示( 戻るボタ ン等) プ ロセス破棄 実行中 ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる 一時停止 ビジブル ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる ・ 処理完了 ・ 停止命令 ・ 他Activityの割込み ・ 長時間無操作状態が続いた 状態遷移方向 終了 状態 バッ ク グラ ウンド Service破棄 Activity破棄 アクティビティのライフサイクル under the Creative サービスのライフサイクル This material is licensed Commons License BY-NC-SA 4.0. 69
  • 70. 2.2.1. アクティビティのライフサイクル • アクティビティのライフサイクル – アクティビティの3種類の状態遷移が定められている (フォアグラウンド、バックグラウンド、ビジブル) – 状態の変化が発生した時、イベントが通知される Activity起動 フ ア ォ グラ ウンド 実行中 ・ "戻る"で元画面に復帰 ・ 他Activityの割込み ・ 端末スリ ープ ・ 長時間無操作状態が続いた ・ Activityがフォ アグラ ウンド に表示( 戻るボタ ン等) プ ロセス破棄 ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる 一時停止 ビジブル ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる ・ 他Activityの割込み ・ 長時間無操作状態が続いた 状態遷移方向 終了 状態 バッ ク グラ ウンド This material isActivity破棄 under the Creative licensed Commons License BY-NC-SA 4.0. 70
  • 71. 2.2.1. アクティビティのライフサイクル • 通知されるイベントを含むライフサイクル Activity起動 onCreate() ・ "戻る"で元画面に復帰 onStart() フ ア ォ グラ ウンド プ ロセス破棄 onRestart() onResume() 実行中 ・ 他Activityの割込み ・ 端末スリ ープ ・ 長時間無操作状態が続いた onPause() ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる 一時停止 ・ Activityがフ アグラ ォ ウンド ビジブル ・ 他Activityの割込み ・ 長時間無操作状態が続いた に表示( 戻るボタ ン等) onStop() ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる 終了 ・ Activityがフ アグラ ォ ウンド に表示( 戻るボタ ン等) バッ ク グラ ウンド 状態遷移方向 onDestroy() 状態 Activity破棄 This material is licensed under the Creative Commons License BY-NC-SA 4.0. Activityのイ ベント 71
  • 72. 2.2.1. アクティビティのライフサイクル • アクティビティでは以下のイベントが通知される 。開発者はこれらの通知に応答する処理を作成で きる – 通知されるイベント # イベント名 内容 1 onCreate 最初の起動時に発生するイベント 2 onStart アクティビティが表示される直前に発生するイベント 3 onResume アクティビティが利用可能な状態(アクティブ状態)になる直前 に発生するイベント 4 onPause アクティビティがビジブルになる直前に発生するイベント 5 onStop onPauseの後、しばらく使用しない状態になった場合に発生するイ ベント (メモリ不足の際、イベントが発生しない場合がある) 6 onRestart 終了状態のアクティビティが再度表示される際に発生するベント 7 onDestory アクティビティが破棄される直前に発生するイベント (メモリ不足の際、イベントが発生しない場合がある) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 72
  • 73. 2.2.1. アクティビティのライフサイクル • アクティビティの通知イベントに関する注意 – onStop、onDestroyは必ず通知される保証はない • Androidはメモリ不足の状態に なった場合、使用していないアプ リケーションプロセスを強制終了 する。 • この場合、アクティビティのライフサ イクルでは、onStop、onDestroy のは通知される事が保証されて いない • 必ず必要な処理の場合はonPause で処理を行う onCreate() ・ "戻る"で元画面に復帰 onStart() onResume() プロセス破棄 実行中 ・ 他Activityの割込み ・ 端末スリ ープ ・ 長時間無操作状態が続いた onPause() ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる 一時停止 ・ 他Activityの割込み ・ 長時間無操作状態が続いた onStop() ・ 他アプリ ケーショ ンから メ を モリ 要求さ れる 使用可能メモリが不足した場合の 遷移ルート This material is licensed under the Creative Commons License BY-NC-SA 4.0. 終了 onDestroy() 73
  • 74. 2.2.2. サービスのライフサイクル • サービスには右図のようなライフ サイクルが定義されている • アクティビティと同じように状態 変化時にイベントが通知される為 、通知に応答する処理を作成する 事ができる # イベント 名 最初の起動時に発生するイベント 2 onStart サービスが起動される直前に発生するイベ ント 3 onDestroy サービスが破棄される直前に発生するイベ ント onCreate() onStart() 内容 1 onCreate Service起動 実行中 ・ 処理完了 ・ 停止命令 onDestroy() 状態遷移方向 状態 Service破棄 This material is licensed under the Creative Commons License BY-NC-SA 4.0. Activityのイベント 74
  • 75. 2.3. Androidのセキュリティ • ネットワークや、カメラ等のハードウェアの機能 を利用する為には、アプリケーション毎に利用許 可情報を設定する – アプリケーションは、OS、アプリケーション、ユーザ ーデータ等に影響を与える可能性のある操作はできな いように制限されている This material is licensed under the Creative Commons License BY-NC-SA 4.0. 75
  • 76. 2.3. Androidのセキュリティ • アプリケーションに利用許可を設定する方法 1. AndroidManifest.xmlにuses-permissionタグを追加する 2. android:nameに許可する機能の設定値を設定する ※ 下記の例では、アプリケーションがインターネットへ接続す る事を許可している ■設定例 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=http://schemas.android.com/apk/res/android android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> ・・・ インターネット接続許可 </application> 情報の設定 <uses-sdk android:minSdkVersion=“7" /> <uses-permission android:name=“android.permission.INTERNET“/> // ・・・ 手順1,2 </manifest> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 76
  • 77. 2.3. Androidのセキュリティ • Androidアプリケーションが以下の機能を利用す るには許可情報をAndroidManifest.xmlに設定する 許可情報設定値の一例 設定値(android.permission) 説明 INTERNET インターネットへの接続 ACCESS_FINE_LOCATION 位置情報(GPS等)へのアクセス CALL_PHONE 呼び出し画面を使用せずに発呼する READ_CONTACTS アドレス帳の読み込み WRITE_CONTACTS アドレス帳への書き込み CAMERA カメラデバイスへのアクセス その他の設定値は、以下URLを参照 http://developer.android.com/intl/ja/reference/android/Manifest.permission.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 77
  • 78. 2.3. Androidのセキュリティ • 利用許可情報を含めたアプリケーションは、イン ストール時に許可する情報の確認が行われる インターネット接続許 可の確認 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 78
  • 79. 3. 開発環境の準備 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 79
  • 80. 3章の概要 • インストールする開発ツール • 各開発ツールのインストール方法 – 開発ツールはC:android_trainingdevtoolsに格納されて いるものを使用する • エミュレータの準備 – Android Virtual Device(AVD)の作成 – AVDの動作確認 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 80
  • 81. 3.1. インストールする開発ツール • 本トレーニングでは下記の開発ツールのインスト ールを行う ソフトウェア バージョン 統合開発環境 Eclipse 3.5 (Galileo) Java SDK JDK 1.6.0_20 Android SDK 2.1 r2 Android Plug-in Android Development Tools (ADT) Ver.0.9.X This material is licensed under the Creative Commons License BY-NC-SA 4.0. 81
  • 82. 3.2.各開発ツールのインストール方法 • Android SDKのインストール 1. スタートメニューの[すべてのプログラム]-[アクセサリ]の[エクスプロー ラ] からエクスプローラを起動し、C:android_trainingdevtoolsを開く 2. android-sdk_r06-windows.zipのファイルを右クリックし、[プログラムから 開く]-[Compresses (zip) Folders]を選択する 3. zip内のandroid-sdk-windowsフォルダをC:android_trainingtoolsに移動させ る 3 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 82
  • 83. 3.2.各開発ツールのインストール方法 • 環境変数の設定 1. 2. スタートメニューの [コントロールパネル]からコントロールパネ ルを開き、[システム]をダブルクリックする システムのプロパティウィンドウの[詳細設定]タブの[環境変数] ボタンをクリックする 1 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 83
  • 84. 3.2.各開発ツールのインストール方法 3. 環境変数ウィンドウの[システムの環境変数]から[Path]を選択し 、[編集]ボタンをクリックする 4. システム変数の編集ウィンドウの変数値の先頭に C:android_trainingtoolsandroid-sdk-windowstools;を追加する システム変数の編集ウィンドウの[OK]ボタンをクリックする 環境変数ウィンドウの[OK]ボタンをクリックする 5. 6. 追加する 4 3 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 84
  • 85. 3.2.各開発ツールのインストール方法 7. 環境変数の変更が反映されていることを確認する 1. スタートメニュー[すべてのプログラム]-[アクセサリ]の[コマンドプロ ンプト]をクリックし、コマンドプロンプトを起動する 2. コマンドプロンプトからコマンド set<sp>|<sp>find<sp> “android” を実 行し、Pathの設定が表示されることを確認する(出力結果は、下図を 参照) ※ <sp> ・・・ 半角スペースの意 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 85
  • 86. 3.2.各開発ツールのインストール方法 • Android Development Tools (ADT)のインストール 1. 2. デスクトップにあるeclipseをダブルクリックし、Eclipseを起動 する Eclipseのメニュー[Help]から[Install New Software…+を選択する 1 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 86
  • 87. 3.2.各開発ツールのインストール方法 3. Proxyを利用しているネットワーク環境の場合、以下の設定を行 う i. ii. iii. Eclipseのメニュー[Window]から[Preferences]を選択する Preferencesウィンドウから[General]-[Network Connections]を選択す る Network Connectionsの画面から「Manual Proxy Configuration」を選択 し、以下の項目を設定する – – HTTP Proxy: Proxyサーバアドレス(右図の例では、192.168.1.1) iii Port : Proxyサーバのポート番号(右図の例では 80) ii i This material is licensed under the Creative Commons License BY-NC-SA 4.0. 87
  • 88. 3.2.各開発ツールのインストール方法 4. Available SoftwareウィンドウのWork withの入力欄に http://dl-ssl.google.com/android/eclipse/を入力し、Enterキーを押 す 4 http://dl-ssl.google.com/android/eclipse/ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 88
  • 89. 3.2.各開発ツールのインストール方法 • サーバに接続できない場合の代替方法 4-1. Available Softwareウィンドウの[Add...]ボタンをクリックする 4-2. Add Siteウィンドウで[Archive]ボタンをクリックする 4-3. ファイル名にC:android_trainingdevtoolsforOfflineフォルダ下 のADT-0.9.X.zipを入力し、[開く]ボタンをクリックし、[OK]ボ タンをクリックする 4-1 C:android_trainingdevtoolsforOffline 4-2 4-3 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 89 89
  • 90. 3.2.各開発ツールのインストール方法 5. 6. Available Softwareウィンドウで、Android DDMS、Android Development Toolsをチェックし、[Next]ボタンをクリックする Installウィンドウで[Next]ボタンをクリックする 5 6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 90
  • 91. 3.2.各開発ツールのインストール方法 8. 9. Installウィンドウで[I Accept the terms of the license agreements]を チェックし、[Finish]ボタンをクリックする。インストールが開 始する インストールが完了し、Sowftware Updatesのメッセージが表示 されたら[Yes]をクリックし、Eclipseを再起動する 8 9 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 91
  • 92. 3.2.各開発ツールのインストール方法 10. Eclipse再起動後、ツールバーにAndroid Development Toolsのボタ ンが追加されていることを確認する 10 Android Development Tools のツールボタンが表示され ている This material is licensed under the Creative Commons License BY-NC-SA 4.0. 92
  • 93. 3.2.各開発ツールのインストール方法 • Eclipseの設定を行う – ADTにAndroid SDKを認識させる 1. Eclipseのメニュー[Window]から[Preferences]を選択する 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 93
  • 94. 3.2.各開発ツールのインストール方法 2. 3. 4. Preferencesウィンドウから[Android]を選択する。選択するとエラ ーメッセージが表示されるので、[OK]をクリックしてメッセージ ウィンドウを閉じる SDK Locationに「 C:android_trainingtoolsandroid-sdk -windows」 を入力する Preferenesウィンドウ上部のエラーメッセージが消えていること を確認し、[OK]ボタンをクリックする 3 2 エラーメッセージ が表示されていな い事を確認する C:android_trainingtoolsandroid-sdkwindows 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 94
  • 95. 3.2.各開発ツールのインストール方法 5. Proxyを利用しているネットワーク環境の場合、以下の設定を行 う i. ii. Preferencesウィンドウから[Android]-[Launch]を選択する Launchの画面から[Default Emulator Options]にProxy設定を追加する (書式: -http-proxy<sp><Proxy サーバアドレス>:<ポート番号> ) – Proxyサーバアドレスが「 http://192.168.1.1 」、ポート番号が「80」の 場合、 以下のように設定する ii » -http-proxy<sp>http://192.168.1.1:80 <sp> ・・・半角スペース の意 i This material is licensed under the Creative Commons License BY-NC-SA 4.0. 95
  • 96. 3.2.各開発ツールのインストール方法 6. Eclipseのメニュー[Window]から[Android SDK and AVD Manager]を 選択する 6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 96
  • 97. 3.2.各開発ツールのインストール方法 7. 8. Android SDK and AVD Managerウィンドウの左カラムからAvailable Packagesを選択する 右カラムのURLを[+]をクリックして展開し、[SDK Platform Android 2.1, API-7, revision 2]にチェックを入れ、[Install Selected]ボタンを クリックする ※ オフライン環境では講師の指示に従いC:android_trainingdevtoolsforOffline の platformフォルダをC:android_trainingtoolsandroid-sdk-windowsにコピーすること 7 8 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 97
  • 98. 3.2.各開発ツールのインストール方法 9. Choose Packages to Installウィンドウにて[Accept]を選択し[Install] ボタンをクリックする 10. インストールが終了したら、[Close]ボタンをクリックし、インス トールを終了する。 10 9 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 98
  • 99. 3.3.エミュレータの準備 • エミュレータのデバイスイメージであるAndroid Virtual Device(AVD)を作成する 1. Eclipseのメニュー[Window]から[Android SDK and AVD Manager]を 選択する 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 99
  • 100. 3.3.エミュレータの準備 2. Android SDK Devicesウィンドウの[New]ボタンをクリックする 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 100
  • 101. 3.3.エミュレータの準備 3. Create new Android Virtual Deviceウィンドウ表示されたら、各値 を以下のように設定する 項目名 Name Android 2.1-update1 Skin 3 default Target 4. 設定値 WVGA800 設定完了後、[Create AVD] ボタン をクリックする 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 101
  • 102. 3.3.エミュレータの準備 • エミュレータを起動し、AVDが作成できているこ とを確認する 1. 2. EclipseにおいてAndroid SDK and AVD Managerを立ち上げ、AVD Nameが Defaultを選択し、[Start]ボタンをクリックする。 Launch Optionウィンドウにて[Scale display to real size]にチェックを入れ 、[Screen Size (in)]に 6 と入力し[Launch]ボタンをクリックする 1 環境により適宜最適サイ ズを入力する 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 102
  • 103. 3.3.エミュレータの準備 3. 下図のようなエミュレータ画面が表示される事を確認する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 103
  • 104. 4. チュートリアル This material is licensed under the Creative Commons License BY-NC-SA 4.0. 104
  • 105. 4章の概要 • HelloWorldアプリケーションの作成を通じて、開 発ツールの操作方法を習得する – Android Development Tools(ADT) – エミュレータ、Android Virtusl Device(AVD) – Dalvik Debug Monitor Services (DDMS) This material is licensed under the Creative Commons License BY-NC-SA 4.0. 105
  • 106. 4.1. ADTでアプリケーションを作成する • Android Development Tools(ADT)とは? – AndroidアプリケーションをEclipseで開発する為のPlugin • ADTが提供する機能 – Androidプロジェクトの作成 – Androidアプリケーションの実行・デバッグ – リソースファイルの作成支援 • リソースファイルについては本節で解説 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 106
  • 107. 実 習 4.1.1. Hello Worldの表示 • 初めにAndroidプロジェクトを作成し、下記のア プリケーションを作成する – 完成イメージ 新規作成したプロジェクトは、左図 のようなHello World HelloWorld!と表 示されるアプリケーションとして作 成される This material is licensed under the Creative Commons License BY-NC-SA 4.0. 107
  • 108. 実 習 4.1.1. Hello Worldの表示 • Androidプロジェクトを作成する 1. 2. 3. デスクトップのeclipseをダブルクリックし、Eclipseを起動する Eclipseのメニュー[File]から[new]-[Other]を選択する Newウィンドウの[Android]-[Android Project]を選択し[Next]ボタン をクリックする 3 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 108
  • 109. 実 習 4.1.1. Hello Worldの表示 3. [New Android Project]ウィンドウからProject Name、Build Target、 Propertiesに下記を入力する Project Nameに HelloWorld を入力する Build Targetで Android 2.1-update1 をチェッ クする Propertiesの各項目に以下を入力する Application Name :HelloWorld Package Name :jp.oesf.tutorial Create Activity :HelloWorld MinSDK Version :7 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 109
  • 110. 実 習 4.1.1. Hello Worldの表示 4. 5. Android Projectが生成され、左図のように表示される Package ExplorerからHelloWorldプロジェクトを選択し、右クリッ ク[Run As]-[Android Application]を選択する 4 5 5 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 110
  • 111. 実 習 4.1.1. Hello Worldの表示 6. エミュレータが別ウィンドウで起動し、下記画面が表示される ことを確認する • アプリケーションタイトルが HelloWorld である • アプリケーションに Hello World, HelloWorld! と表記されている 6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 111
  • 112. 4.2. 画面デザインを作成する • 画面デザインをリソースファイルで作成する – リソースファイルとは? • ソースコード以外の全て外部ファイル • Androidプロジェクトでは/res以下に格納されているファイル – リソースファイルの種類(一部抜粋) # リソースファイル 内容 1 res/drawable(-Xdpi)/*.* 画像ファイル(.png、.jpeg、.gif) 2 res/layout/*.xml 画面デザイン情報(ex. main.xml) 3 res/values/colors.xml 色情報 4 res/values/dimens.xml サイズ情報(ex. 5px,10dip,20pt) 5 res/values/strings.xml 文字列情報 ■リソースファイルに関する説明 http://developer.android.com/intl/ja/guide/topics/resources/resources-i18n.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 112
  • 113. 4.2. 画面デザインを作成する • ADTには、リソースファイルの作成支援機能があ る – ADTは3種類のリソースファイルエディタを提供する • レイアウトエディタ – 画面デザインリソースファイルの作成をサポート • リソースエディタ – 画面デザインリソースファイル以外のリソースファイルの作成をサポー ト • マニフェストエディタ – AndroidManifest.xmlの作成をサポート This material is licensed under the Creative Commons License BY-NC-SA 4.0. 113
  • 114. 実 習 4.2. 画面デザインを作成する • レイアウトエディタの機能を使用して、 HelloWorldにボタン、チェックボックス、テキス ト入力を含む画面を作成する – 完成イメージ • ボタン、チェックボックスはレイアウトエデ ィタのGUI機能を利用して追加する • テキスト入力は、画面デザインリソースファ イル(XMLファイル)を直接編集して追加す る • 各ビューの表示文字列は以下の通り設定する # ビュー 表示文字列 1 ボタン Button01 2 チェックボック ス CB1 3 テキスト入力 EditText This material is licensed under the Creative Commons License BY-NC-SA 4.0. 114
  • 115. 実 習 4.2.1. リソースファイルの作成 • 画面デザインリソースファイルを開く 1. 2. Package Explorerからres/layout/main.xmlをダブルクリックする res/layout/main.xmlのファイルがレイアウトエディタで開かれ、 右図の画面が表示されることを確認する 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 115
  • 116. 実 習 4.2.1. リソースファイルの作成 • レイアウトエディタのLayoutタブで、画面デザイ ンにボタン、チェックボックスを追加する 1. 2. 3. [Views]からButtonを選択し、スクリーン上にドラッグ&ドロップ する 右図のようにボタンが表示される 同様に、 [Views]からCheckBoxをスクリーン上にドラッグ&ドロ ップし、表示されることを確認する 2 1 ドラッグ&ド ロップ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 116
  • 117. 実 習 4.2.1. リソースファイルの作成 4. 4. スクリーン上のCheckBox01を選択し、PropertiesビューからTextプ ロパティを CheckBox01 から CB1 に変更する 同様に@+id/Button01のTextプロパティをButton01に変更する Package ExplorerからHelloWorldプロジェクトを選択し、右クリッ ク[Run As]-[Android Application]を選択する 5 5 5 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 117
  • 118. 実 習 4.2.1. リソースファイルの作成 6. エミュレータが起動し、下記画面が表示されることを確認する • 画面にボタン、チェックボックスが表示されている • ボタンの表示文字列が Button01 であることを確認する • チェックボックスの表示文字列が CB1 であることを確認する 6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 118
  • 119. 実 習 4.2.1. リソースファイルの作成 • レイアウトエディタの<ファイル名>タブで、画面 デザインにテキスト入力を追加する 1. レイアウトエディタのmain.xmlタブをクリックし、レイアウトエ ディタにXMLソースが表示されることを確認する ■res/layout/main.xml(一部割愛) 1 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android ・・・・・・・・・・・ > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> <Button android:text="Button01" android:id="@+id/Button01“ ・・・・・・・・・></Button> <CheckBox android:id="@+id/CheckBox01“ android:text="CB1“ ・・・・・・・・・ ></CheckBox> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 119
  • 120. 実 習 4.2.1. リソースファイルの作成 2. テキスト入力ビューである EditTextタグをmain.xmlに追加する ■res/layout/main.xml(一部割愛) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android ・・・・・・・・・・・ > <TextView ・・・・・・・・・・・ /> <Button ・・・・・・・・・></Button> <CheckBox ・・・・・・・・・ ></CheckBox> <EditText android:id="@+id/EditText01" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="EditText"></EditText> </LinearLayout> 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 120
  • 121. 実 習 4.2.1. リソースファイルの作成 3. Layoutタブに表示を切り替えて、下記のようにEditTextが表示さ れている事を確認する 表示切替 LayoutタブでEditTextが 表示されている 3 追加したEditText This material is licensed under the Creative Commons License BY-NC-SA 4.0. 121
  • 122. 実 習 4.2.1. リソースファイルの作成 4. Package ExplorerからHelloWorldプロジェクトを選択し、右クリッ ク[Run As]-[Android Application]を選択する エミュレータが起動し、右画面が表示されることを確認する 5. • テキスト入力が表示されている • テキスト入力の表示文字列が EditText である 4 5 5 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 122
  • 123. 4.2.1. リソースファイルの作成 • レイアウトエディタ使用時の注意点 1. Layoutタブでビューグループ(Layoutに含まれているビュー)を ドラッグ&ドロップでスクリーンに張り付けても、スクリーン 上にViewGroupが表示されない • 以下の事は、XMLを直接編集する事で対応する – ビューグループの中にボタン等のViewを配置する 2. カスタムビューは[Views]から選択する事はできない • XMLを直接編集する事で対応する 1 LinearLayoutを配置した が 表示されない This material is licensed under the Creative Commons License BY-NC-SA 4.0. 123
  • 124. 4.2.1. リソースファイルの作成 • リソースファイルを使用した画面作成の仕組み – アクティビティはRクラスを使用し、画面デザインリソースファイ ルの内容を取得する • Rクラス – ビルド時に自動生成されるクラス – プログラムからリソースファイルの情報を取得する為に必要なクラス – 取得したリソースファイル情報から、Activity#setContentViewによ って画面デザインを表示する ■HelloWorld.java R.layout.mainがmain.xmlを示す public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); } } <?xml version="1.0" encoding="utf-8"?> <LinearLayout ・・・・・・・・・・・ > ・・・・・・・・・・・ <EditText android:id="@+id//EditText01“ ・・・・・・・・・・・ android:text="EditText"></EditText> </LinearLayout> ■setContentView 画面デザインをアクティビティ上に表示 する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 124
  • 125. 4.2.1. リソースファイルの作成 • Rクラスとリソースファイルの関係 – プログラムとリソース情報は、リソースIDで関連付けられている ■HelloWorld.java setContentView(R.layout.main); 参照 ■R.java public static final class layout { public static final int main=0x7f030000; } リソースID This material is licensed under the Creative Commons License BY-NC-SA 4.0. リソース ファイル 125
  • 126. 実 習 4.3. デザイン以外のリソースを使用す る • HelloWorldに追加したボタンの表示文字列 Button01を Hello Button に変更する • 表示文字列は文字列リソースファイルに設定する – 完成イメージ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 126
  • 127. 4.3. デザイン以外のリソースを使用す る • 文字列リソースファイルは、アプリケーションで 使用する文字列を定義したリソースファイルであ る 1. 画面上に表示す る文字列を文字 (res/values/strings.xml) 列リソースファ ■文字列リソースファイル(res/values/strings.xml) <?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, HelloWorld!</string> <string name="app_name">HelloWorld</string> </resources> 文字列 を参照 する イルに追加する ■画面デザインリソースファイル(res/layout/main.xml)上のTextView <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> 2. TextViewのTextプロパティから文字列 リソースファイルの文字列を参照す る 実行 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 3. strings.xmlに設 定されている文 字列が表示され ている 127
  • 128. 実 習 4.3. デザイン以外のリソースを使用す る • 文字列リソースファイルに文字列設定を追加する 1. 2. Package Explorerからres/values/strings.xmlをダブルクリックする res/values/strings.xmlのファイルがリソースエディタで開かれ、 右図の画面が表示されることを確認する 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 128
  • 129. 実 習 4.3. デザイン以外のリソースを使用す る 3. 4. Resourcesタブの*Add…+ボタンをクリックし、追加要素の選択画 面を表示する 選択画面から、String を選択し、[OK] ボタンをクリックする 3 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 129
  • 130. 実 習 4.3. デザイン以外のリソースを使用す る 5. 6. ResourcesタブのResouces Elementsに String が追加されて いることを確認する ResourcesタブのAttributes for StringのName、Valueに以下の値を入 力する Attributes for Stringの設定値 項目名 5 Name button_label Value 6 設定値 Hello Button This material is licensed under the Creative Commons License BY-NC-SA 4.0. 130
  • 131. 実 習 4.3. デザイン以外のリソースを使用す る 7. 8. 9. Package Explorerからres/layout/main.xmlをダブルクリックする レイアウトエディタが起動したら、Layoutタブを開いてButton01 を選択する PropertiesビューからTextプロパティを@string/button_label に変 更する 8 7 9 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 131
  • 132. 実 習 4.3. デザイン以外のリソースを使用す る 10. Package ExplorerからHelloWorldプロジェクトを選択し、右クリッ ク[Run As]-[Android Application]を選択する 11. エミュレータが起動し、右画面が表示されることを確認する • ボタンの表示文字列が Hello Button になっている 11 10 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 132
  • 133. 4.4. マニフェストファイルを変更する • マニフェストエディタ – マニフェストファイルを変更する為の5つの機能がある • Manifestタブ – バージョン情報、拡張情報等 • Applicationタブ – 使用コンポーネント情報、アイコン、アプリケーション名等 • Permissionsタブ – アクセス制限設定 • Instrumentationタブ – プロファイラ等の情報収集用クラスの設定(TestRunner等) • AndroidManifest.xmlタブ – XMLファイルの直接編集 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 133
  • 134. 4.4. マニフェストファイルを変更する • マニフェストファイルとは? – AndroidManifest.xml(アプリケーションに1つ存在) – アプリケーションに関する以下の情報を定義する • • • • • アプリケーションのアイコン、タイトルの設定 使用するコンポーネント(Activity、Service等)の定義 コンポーネントの振る舞いに関する定義 アプリケーションのアクセス制限設定 ライブラリの使用設定 ■マニフェストファイルに関する説明 http://developer.android.com/intl/ja/guide/topics/manifest/manifest-intro.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 134
  • 135. 4.4.1.アプリケーションにアクティビティ を追加 • アプリケーションにアクティビティを追加する ファイル名 追加アクティビティ HelloWorld2.java 追加画面デザイン リソースファイル res/layout/ helloworld2.xml – アプリケーションにアクティビティ HelloWorld2を追加する – HelloWorld2の画面デザインデザインリソ ースファイルがhelloworld2.xmlである This material is licensed under the Creative Commons License BY-NC-SA 4.0. 135
  • 136. 4.4.1.アプリケーションにアクティビティ を追加 • アプリケーションに追加したアクティビティを利 用できるようにApplicationタブで設定する 1. 2. Package ExplorerからAndroidManifest.xmlをダブルクリックする AndroidManifest.xmlのファイルがマニフェストエディタで開かれる。マ ニフェストエディタのApplicationタブを選択し、右図の画面が表示され ることを確認する 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 136
  • 137. 4.4.1.アプリケーションにアクティビティ を追加 3. 4. Application Nodesの*Add…+ボタンをクリックし、追加要素の選択画面を 表示する 選択画面から Activity を選択し、[OK]ボタンをクリックする 4 3 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 137
  • 138. 4.4.1.アプリケーションにアクティビティ を追加 5. 6. Application NodesにActivityが追加されていることを確認する Attributes for Activityの Name に下の値を入力する 項目名 Name 5 設定値 HelloWorld2 6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 138
  • 139. 4.4.2.インターネットへのアクセス許可を 設定 • インターネットへのアクセス許可をPermissonsタ ブで設定する 1. 2. Package ExplorerからAndroidManifest.xmlをダブルクリックする AndroidManifest.xmlのファイルがマニフェストエディタで開かれる。マ ニフェストエディタのPermissonsタブを選択し、右図の画面が表示され ることを確認する 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 139
  • 140. 4.4.2.インターネットへのアクセス許可を 設定 3. 4. Permissionsの*Add…+ボタンをクリックし、追加要素の選択画面を表示す る 選択画面から Uses Permisson を選択し、[OK]ボタンをクリックする 3 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 140
  • 141. 4.4.2.インターネットへのアクセス許可を 設定 5. 6. 5 Permissionsに Permission が追加されていることを確認する Attributes for Uses Permissionの Name のプルダウンから android.permission.INTERNETを選択する 6 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 141
  • 142. 4.5. エミュレータの使用方法 • エミュレータとは? – Android Virtual Device(AVD)を読み込み、パソコン上でのハード ウェア動作をエミュレートする • エミュレータでサポートされていない機能・設定 – – – – – – – 実際の電話からの着信、実際の電話への発信 USB接続 カメラ・ビデオ撮影 ヘッドフォン接続 Bluetoothを使った通信 接続状態の設定 電池の充電レベル、AC電源の設定 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 142
  • 143. 4.5. エミュレータの使用方法 • Android Virtual Device(AVD)とは? – Android端末情報を持っているもの • Android動作環境情報 (Androidのバージョン毎の動作環境) • スキン情報(外観、モニターサイズ) • SD Card情報 命令 Android Virtual Device ( AVD ) 操作 emulator.exe 使用者 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 143
  • 144. 4.5. エミュレータの使用方法 • エミュレータの操作方法 # 内容 デバイス キー 1 音量DOWN 2 音量UP 1 2 3 11 4 3 電源 電源入・切 10 5 4 選択ボタ ン 選択ボタン 9 8 7 6 5 通話終了 6 検索 7 戻る 前の画面に戻る 8 メニュー 12 検索ウィジッドに移動 メニューを画面に表示 9 ホーム ホームを表示 10 通話開始 8 11 十字キー カーソルの移動 12 キーボー ド キー入力 144 This material is licensed under the Creative Commons License BY-NC-SA 4.0.
  • 145. 4.5. エミュレータの使用方法 • 画面向きの切り替え(Ctrl + F11) – デバイスの向きに合わせた画面表示 縦長表示(ポートレート) 横長表示(ランドスケープ) Androidエミュレータに関する詳細情報 http://developer.android.com/intl/ja/guide/developing/tools/emulator.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 145
  • 146. 4.6. デバッグツールの使用方法 • ADT – Eclipseのデバッグ機能がAndroidアプリケーション開発で利用でき る • ブレークポイント • ステップ実行 • Dalvik Debug Monitor Services(DDMS) – Android SDK同梱のデバッグツール – 以下の機能がある • モニタリング • エミュレータ操作 • エミュレータ・ハードウェア内の情報取得 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 146
  • 147. 4.6.1.ADTの使用方法 • ブレークポイント/ステップ実行使用方法 – ブレークポイントの設定方法、ステップ実行の方法は全てEclipse の使用方法と同じ Debugビューと ステップ実行 ブレークポイント による処理中断 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 147
  • 148. 4.6.1.ADTの使用方法 • ADTでデバッグする際の注意 – ハードウェア(実際のAndroid端末)を使用してデバッグをするに はAndroidManifest.xmlに設定が必要 ■AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.oesf.mtgeduwg.training.rssreader" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> ・・・ </application> デバッグの設定 <uses-sdk android:minSdkVersion=“7" /> </manifest> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 148
  • 149. 4.6.2.DDMSの使用方法 • DDMSを起動する2つの方法 – ddmsコマンドを実行する 1. 2. スタートメニューの[すべてのプログラム]-[アクセサリ]の[コマンド プロンプト]を選択し、コマンドプロンプトを起動する コマンドプロンプトで ddms と入力後、[Enter]キーを押す コマンドから起動した DDMS This material is licensed under the Creative Commons License BY-NC-SA 4.0. 149
  • 150. 4.6.2.DDMSの使用方法 • DDMSを起動する2つの方法 – EclipseからDDMSを利用する 1. Eclipseのメニュー[Window]から[Open Perspective]-*Other…+-[DDMS]を 選択する EclipseのDDMSパースペクティ ブ ※コマンド起動したDDMSに比べ一部使用できない機能がある This material is licensed under the Creative Commons License BY-NC-SA 4.0. 150
  • 151. 4.6.2.DDMSの使用方法 • DDMSのデバッグ機能 – モニタリング 1. 2. アプリケーションが出力するログの参照 リソース使用状況の参照 – エミュレータへのデータ送信 1. 2. 3. 電話発信 SMS送信 位置情報送信 – スクリーンショットの取得 – プロセス管理 1. ガベージコレクション実行 2. プロセス停止 – ファイル操作 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 151
  • 152. 4.6.3.アプリケーションログの参照 • アプリケーションログの参照 – LogCatビューから、アプリケーションが出力しているログを参照 する事ができる LogCat アプリケーションから出 力されているログ情報を 表示 Logレベル レベル E エラー情報 W 警告情報 I 動作情報 D デバッグ情報 V 詳細情報 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 152
  • 153. 4.6.3.アプリケーションログの参照 • アプリケーションログの参照 – ログを出力するには、android.util.Logクラスのログ出力メソッドを 使用する ■サンプルコード import android.util.Log; Log.e(“HelloWorld”, “Error Message”); Log.w(“HelloWorld”, “Warning Message”); Log.i(“HelloWorld”, “Infomation Message”); グ Log.d(“HelloWorld”, “Debug Message”); Log.v(“HelloWorld”, “Verbose Message”); // エラーを出力するログ // ワーニングを出力するログ // アプリケーション動作の情報を出力するロ // デバッグ情報を出力するログ // 詳細情報を出力するログ ログ出力 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 153
  • 154. 実 習 4.6.4.Hello Worldからログを出力する • HelloWorldの起動時にアプリケーションログを出 力 1. 2. Package ExplorerからHelloWorld.javaをダブルクリックする HelloWorld.javaのソースコードが開かれ、右図の画面が表示され ることを確認する。 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 154
  • 155. 実 習 4.6.4.Hello Worldからログを出力する 3. HelloWorld#onCreateにログ出力を行う5つのコードを追加する ■HelloWorld.java package jp.oesf.tutorial; import android.app.Activity; import android.os.Bundle; import android.util.Log; public class HelloWorld extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); Log.e("HelloWorld", "Error Message"); Log.w("HelloWorld", "Warning Message"); Log.i("HelloWorld", "Infomation Message"); Log.d("HelloWorld", "Debug Message"); Log.v("HelloWorld", "Verbose Message"); 3 } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 155
  • 156. 実 習 4.6.4.Hello Worldからログを出力する 4. 5. Package ExplorerからHelloWorldプロジェクトを選択し、右クリッ ク[Run As]-[Android Application]を選択する エミュレータが起動し、右画面が表示されることを確認する 5 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 156
  • 157. 実 習 4.6.4.Hello Worldからログを出力する 6. 7. EclipseのパースぺクティブをDDMSに変更し、DDMSの画面が表示 されることを確認する LogCatビューに5つのログが出力されていることを確認する 6 7 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 157
  • 158. 4.6.5.リソース使用状況の確認 • リソース使用状況を参照する – 参照できる情報と表示画面 • infoビュー(コマンド実行時のみ) – プロセス情報(ID、DalvikVM情報)を表示する • Threadsビュー – 動作しているスレッドの情報を表示する • VM Heapビュー – ヒープメモリの使用状況を表示する • Allocation Trackerビュー – メモリ確保状況(確保クラス、メソッド等)を表示する • Sysinfoビュー (コマンド実行時のみ) – システム状態(CPU使用率、メモリ状況)をグラフ表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 158
  • 159. 4.6.5.リソース使用状況の確認 • VM Heap情報を参照する Heap情報を表示したい プロセスにUpdate設定 をする 下記項目を一覧表示 オブジェクトの型 オブジェクトの個 数 使用メモリ合計 最小使用メモリ 最大使用メモリ 平均使用メモリ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 159
  • 160. 実 習 4.6.6.エミュレータへ電話発信 • 電話発信(エミュレータに電話発信する) 1. Emulator Control ビューを選択する 2. Incoming numberに電話番号(09010000001)を入力する 3. Voiceを選択し、[Call]ボタンをクリックする 発信元番号入力 ex. Incoming number : 09010000001 Voiceを選択 Call : 発信する Hang Up : 電話を切る 1 2 Emulator Control エミュレータに対して電話 発信、SMS送信、位置情報 の送信を行う 3 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 160
  • 161. 実 習 4.6.6.エミュレータへ電話発信 4. エミュレータに09010000001から着信されることを確認する 4 09010000001から エミュレータに着信 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 161
  • 162. 4.6.7.エミュレータへSMS発信 • SMS送信(エミュレータにSMS送信する) 1. Emulator Control ビューを選択する 2. Incoming numberに電話番号(09010000001)を入力する 3. SMSを選択、Messageに送信メッセージ(Hello Android)を入力し 、[Send]ボタンをクリックする 発信元番号・メッセージ入力 ex. Incoming number : 09010000001 SNSを選択 Message : Hello Android 2 3 Send : 送信する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 162
  • 163. 4.6.7.エミュレータへSMS発信 4. エミュレータで09010000001からメッセージが着信していること を確認する SMSが着信したこ とが通知される Messagingアプリケー ションに送信したメッ セージが記録されてい る 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 163
  • 164. 4.6.8.エミュレータへ位置情報送信 • 位置情報を送信する 1. 2. 3. 4. Emulator Control ビューを選択する Manualタブを開き、Decimalを選択する Longitude(経度)/Latitude(緯度)を入力する [Send]ボタンをクリックする This material is licensed under the Creative Commons License BY-NC-SA 4.0. 164
  • 165. 4.6.9.その他エミュレータの機能 • スクリーンショットの取得 1. 2. [Screen Capture]ボタンをクリックすると、Device Screen Capture ウィンドウに端末のスクリーンショットが表示される [Save]ボタンをクリックし、保存ウィンドウからファイルを保存 する 1 2 Device Screen Capture プレビュー表示が表示 される 保存も含めて以下の 機能がある Refresh : 再取得する Save : 保存する Done : 終了する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 165
  • 166. 4.6.9.その他エミュレータの機能 • ガベージコレクションを実行する 1. 2. Devicesビューからガベージコレクションを実行したプロセスを選 択する HeapビューのCause GCボタンをクリックする 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 166
  • 167. 4.6.9.その他エミュレータの機能 • プロセスを停止する 1. 2. Devicesビューからガベージコレクションを実行したプロセスを選 択する DevicesビューのStop Processボタンをクリックする 2 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 167
  • 168. 4.6.9.その他エミュレータの機能 • 端末内のファイル取得/転送/削除を行う 1. 2. FileExplorerビューを選択する 操作に対応するボタンをクリックする(ファイル取得/転送/削 除) 1 File Explorer 端末内のファイル情報を表示す る ※ 実機の場合はアクセス制限 がかかっている為、参照で きる範囲が限られる 2 : 端末からファイルを取り出 す : 端末へファイルを転送する :ファイルを削除する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 168
  • 169. 5. 実習 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 169
  • 170. 5.1.概要 実習の進め方 • 5ステップでAndroidアプリケーション作成を学ぶ 5.2. 5.3. 5.4. • 画面デザインの作り方 • 画面遷移の方法 • データベースの全件検 索と一覧表示 • メニュー画面を作成する • 「ボタンをクリックした」 ことを認識する • 一覧形式の画面を追加する • インテントを使用して画面 遷移を行う 5.5. 5.6. • データベースの1件検 索と画面表示 • データベースにテーブル を作成する • データを一覧形式で表示 する • オプションメニューの 作り方 • 画面間でパラメータを受 け渡す • データを絞り込み検索す る • オプションメニューを追 加する • オプションメニューのク リックを認識する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 170
  • 171. 5.1.概要 実習の準備 • 実習用スケルトンプロジェクトをEclipseに取り込む – 格納場所 • C:android_trainingskeleton_project – ここでは、「RssReaderSkeleton1」を取り込む – 取り込み方法 • Eclipseを起動して「File」メニューから「Import」を選択し、「Import 」ダイアログを表示する • 「Import」ダイアログの「General」から「Existing Projects into Workspace」を選択して「Next」ボタンを押し、スケルトンプロジェ クトのルートディレクトリを指定して取り込む – 「Copy projects into workspace」にチェックを入れる This material is licensed under the Creative Commons License BY-NC-SA 4.0. 171
  • 172. 5.1.概要 実習アプリケーションの概要 • 実習では、RSSリーダーを作成する – 実習で作成するRSSリーダーは、RSSフィード(XML形式の情報) をインターネットから取得し、データベースに保存する。データ ベースを検索して、RSSフィードを画面に表示する インターネットから RSSフィードを取得す る メニュー 画面 データベースに RSSフィードを登 録 インター ネット データベース データベースから RSSフィードを検索 データベースへ登 録が完了した後、 ダイアログを表示 する 一覧画面 一覧表示ボタンをク リックする 一覧データ を 選択する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 詳細画面 172
  • 173. 5.1.概要 実習アプリケーションの概要 • RSSリーダーの画面と機能概要 – 実習で作成するRSSリーダーは、3画面で構成する ・・・ 画面遷移の方向 RSSリーダー 起動 ① メ ニュー 画面 ② 一覧画 面 ③ 詳細画 面 # 画面名 機能概要 1 メニュー画面 • 一覧画面を起動する • オプションメニューを表示する • オプションメニューがクリックされた時に、インターネットからRSSフィー ドを取得してデータベースに登録する • RSSフィード取得後、完了メッセージをダイアログで表示する 2 一覧画面 • データベースに登録されているRSSフィードを一覧形式で表示する 3 詳細画面 • 一覧画面で選択されたRSSフィードのタイトル、配信日時、配信元名、詳細 内容を表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 173
  • 174. 5.2.画面デザインの作り方 メニュー画面を作成する • Androidアプリケーションで画面デザインを作成する方法を 学ぶ • 実習を通じて以下の事を習得する – レイアウトエディタを使用した画面デザインの作成方法 – リソースエディタを使用した文字列リソースファイルの作成方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 174
  • 175. 5.2.画面デザインの作り方 メニュー画面を作成する • レイアウトエディタを使用して画面デザインを作成する 方法 – Androidアプリケーションでは、XML形式のリソースファイルによ り画面デザインを作成できる 1. リソースファイル (res/layout/main.xml)を開き、 レイアウトエディタを起動する (レイアウトエディタについては 「4.2.1.リソースファイルの作成 」を参照) 2. メニュー画面に表示する 「一覧表示」ボタンを Drag & Dropで配置する (ボタンの配置方法は 「4.2.1.リソースファイルの作成 」を参照) 1 2 「Views」から 「Button」をDrag & Dropで配置する レイアウトエディタを使用し てres/layout/main.xmlを開く Copyright 2009, Open under the Creative Foundation, All rights reserved This material is licensedEmbedded SoftwareCommons License BY-NC-SA 4.0. 175 175
  • 176. 5.2.画面デザインの作り方 メニュー画面を作成する 3. Propertiesビューを使用し、配置したボタンのプロパティを設定する – id、layout_width、layout_heightを設定する 3 3. プロパティにid、高さ、 幅を設定する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 176
  • 177. 5.2.画面デザインの作り方 メニュー画面を作成する • プロパティの設定値について – id • プログラムからビューを参照するときに使用するid • 設定値の書式 – @+id/<任意のid> • 設定例(”a_button”というidをボタンにつける場合) – @+id/a_button – layout_width • ビューの横幅を設定する • 設定値の書式 – 数値+単位 ・・・ 数値で指定する。単位はpx,dip等を指定する – wrap_content ・・・ ビューの表示文字列等の幅に合わせる – fill_parent ・・・ 親ビューの数値に自動的に合わせる – layout_height • ビューの縦幅を設定する • 設定値の書式はlayout_widthと同じ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 177
  • 178. 5.2.画面デザインの作り方 メニュー画面を作成する • エミュレータで作成した画面が表示されることを確認す る – Androidアプリケーションのプロジェクトを選択して右クリック「 「RssReader」プロジェクト Run As」から「Android Application」を選択する を指定して、右クリックす る アプリケー ション実行 右クリックで表示されたメニュー の「Run As」から「Android Application」を選択する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 178
  • 179. 5.2.画面デザインの作り方 メニュー画面を作成する • リソースエディタを使用して、画面に表示する文字列を 文字列リソースファイル(res/values/strings.xml)に設定 する – Androidアプリケーションでは、画面に表示する文字列をリソース 画面上に表示する文字列を ファイルにまとめることができる 文字列リソースファイルに ■文字列リソースファイル(res/values/strings.xml) 追加する <?xml version="1.0" encoding=“utf-8"?> <resources> <string name=“app_name”> RssReader </string> <string name=“go_to_list_page_button_label”>一覧表示</string> </resources> 文字列 を参照 する ■画面デザインのリソースファイル(res/layout/main.xml) <Button android:id="@+id/list_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text=“@string/go_to_list_page_button_label“ /> ボタンのプロパティから、文字列 リソースファイルの文字列を参照 する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 179
  • 180. 5.2.画面デザインの作り方 メニュー画面を作成する • メニュー画面に配置したボタンに表示する文字列を文字 列リソースファイルから参照する – リソースエディタを使用して文字列リソースファイル (res/values/strings.xml)を開く – 文字列リソースファイルに、ボタンの表示文字列の設定を追加す る (追加の手順は「4.3.デザイン以外のリソースを使用する」を参照 ) – レイアウトエディタを使用して画面デザインリソースファイル (res/layout/main.xml)を開き、ボタンのプロパティの文字列で文 字列リソースファイルの文字列を利用する – アプリケーションを実行し、文字列が表示されることを確認する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 180
  • 181. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 • 実習のテーマ – メニュー画面の画面デザインを作成する • メニュー画面にはボタンが1つある • ボタンには、「一覧表示」という文字を表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 181
  • 182. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 • 実習の手順 1. レイアウトエディタでリソースファイル(res/layout/main.xml)を 開き、メニュー画面にボタンを配置する 2. 配置したボタンのプロパティ(id、高さ、幅)を設定する 3. 文字列リソースファイル(res/values/strings.xml)にボタンに表示 する文字列を「一覧表示」に追加する 4. ボタンのTextプロパティを3.で設定した文字列リソースファイルを 参照する設定に変更する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 182
  • 183. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 – 設定情報 1 • 画面に配置するビューのプロパティに以下の値を設定する # 2 ビュー プロパティ 1 1 LinearLayout 1. android:layout_width=“fill_parent” 2. android:layout_height=“fill_parent” 2 Button 1. 2. 3. 4. android:id=“@+id/list_button” android:layout_width=“fill_parent” android:layout_height=“wrap_content” android:text=“@string/go_to_list_page_button_label” This material is licensed under the Creative Commons License BY-NC-SA 4.0. 183
  • 184. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 – 設定情報 2 • 文字列リソースファイルに、以下の文字列を追加する ※ 文字列リソースファイルに追加する形式は<string name=“キー”>値</string>となる キー 値 内容 go_to_list_page_button_label 一覧表示 「一覧表示」ボタンに表示する文字列 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 184
  • 185. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 – 設定情報 3 • 以下のリソースファイルを作成する 画面 メニュー画面 - リソースファイル 概要 res/layout/main.xml (リソースファイル) • メニュー画面に一覧表示ボタンを配置する res/values/strings.xml (文字列リソースファイル) • 「一覧表示」ボタン上に表示する文字列「一覧表 示」を追加する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 185
  • 186. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 • 確認方法 – 実習アプリケーションを実行して「一覧表示ボタン」が画面に表 示されることを確認する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 186
  • 187. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 • 実習の答え – res/layout/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“ > <Button android:id="@+id/list_button" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/go_to_list_page_button_label" /> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 187
  • 188. 実 習 5.2.画面デザインの作り方 メニュー画面を作成する 実習 1 • 実習の答え – res/values/strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">RssReader</string> <string name="go_to_list_page_button_label">一覧表示</string> </resources> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 188
  • 189. 5.3.画面遷移の方法 • Androidアプリケーションで画面遷移を行う方法を学ぶ • 実習を通じて以下の事を習得する – 「ボタンをクリックした」ことを認識する方法 – アプリケーションに一覧形式の画面を追加する方法 – Intentクラスを使用した画面遷移の実装方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 189
  • 190. 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する • 「ボタンをクリックした」ことを認識するには – 仕組み • ボタンをクリックすると「イベント」というものが発生する。このイ ベントをプログラムで認識する為に「イベントリスナ」を準備する • イベントを認識したいボタンに対して、あらかじめ作成したイベント リスナを登録しておく • ボタンでイベントが発生すると、特定のメソッドが呼び出される ボタンク リック イベント発生 イベントリスナ public void onClick(View view) { // 処理 } 処理が実行 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 190
  • 191. 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する • 画面上のボタンをクリックしたときに処理を実行する方法 1. 2. 3. イベントリスナは「OnClickListener」インターフェースをインプリ メントする イベントリスナにonClickメソッドを実装する View#setOnClickListenerメソッドを使用してボタンにイベントリス ナを登録する • import android.app.Activity; サンプルコード(サンプルコードではActivityをイベントリスナにする import android.view.View; ) import android.view.View.OnClickListener; public class SampleActivity extends Activity implements OnClickListener { ・・・1 public void onClick(View view) { ・・・・・・・・ ・・・2 findViewById } 引数で指定した id を持つビュー @Override public void onCreate(Bundle savedInstanceState) { オブジェクトを取得するActivity super.onCreate(savedInstanceState); クラスのメソッド setContentView(R.layout.main); View listButton = findViewById(R.id.list_button); ・・・3 listButton.setOnClickListener(this); } } 191 This material is licensed under the Creative Commons License BY-NC-SA 4.0.
  • 192. 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する • onClickメソッドでクリックしたビューを判断する方法 – 引数「view」から、ビューの「id」を取得して判断する • サンプルコード(画面の「list_button」がクリックされたことを判断 する例) public void onClick(View view) { if (view.getId() == R.id.list_button) { ・・・・・・・・ } } View#getId Viewオブジェクトから idを取得するメソッド This material is licensed under the Creative Commons License BY-NC-SA 4.0. 192
  • 193. 実 習 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する 実習 2 • 実習のテーマ – メニュー画面の「一覧表示」ボタンをクリックした時にログを出 力する 一覧表示ボタ ンをクリック This material is licensed under the Creative Commons License BY-NC-SA 4.0. 193
  • 194. 実 習 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する 実習 2 • 実習の手順 1. 2. RssReaderActivityをイベントリスナにする為、 OnClickListenerをインプリ メントする RssReaderActivityのonClickメソッドで、ログを出力する • タグ:「RssReaderActivity 」 • メッセージ:「Clicked.」 3. RssReaderActivity #onCreateで、「一覧表示」ボタンにイベントリスナを 登録する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 194
  • 195. 実 習 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する 実習 2 – 設定情報 • 以下のクラス、メソッドを実装する 画面 メニュー画 面 クラス メソッド onCreate RssReaderActivity onClick 概要 • 「一覧表示」ボタンのイベントリスナを登録する • ログを出力を出力する ログメッセージ「Clicked」 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 195
  • 196. 実 習 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する 実習 2 • 確認方法 – メニュー画面の「一覧表示」ボタンを押した時にログメッセージ が出力されることをLogCatで確認する 一覧表示ボタ ンをクリック ログメッセージ「Clicked.」の出力を 確認 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 196
  • 197. 実 習 5.3.画面遷移の方法 「ボタンをクリックした」ことを認識 する 実習 2 • 実習の答え – RssReaderActivity package jp.oesf.mtgeduwg.training.rssreader; import android.app.Activity; import android.util.Log; import android.view.View; import android.view.View.OnClickListener; public class RssReaderActivity extends Activity implements OnClickListener { public void onClick(View view) { Log.v("RssReaderActivity","Clicked"); } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); View listButton = findViewById(R.id.list_button); listButton.setOnClickListener(this); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 197
  • 198. 5.3.画面遷移の方法 一覧形式の画面を追加する • Androidアプリケーションで一覧形式の画面を追加するに は – 画面デザインリソースファイルを新規作成する – 一覧形式の画面デザインを作成する – 追加画面のアクティビティクラスを作成する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 198
  • 199. 5.3.画面遷移の方法 一覧形式の画面を追加する • 画面デザインのリソースファイルを新規作成する – 作成手順 1. 2. 3. 4. res/layoutディレクトリを選択する Android XML追加ボタンを押す 作成するリソースファイルのファイル名を入力する Finishボタンを押す 2 3 LinearLayout、TableLayout、 ScrollViewなどのビューグ ループを選択できる 1 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 199
  • 200. 5.3.画面遷移の方法 一覧形式の画面を追加する • 一覧形式の画面を作成するには – 仕組み • 一覧形式の画面を作成するには、「枠の画面デザイン」と「行の画面 デザイン」の2つの画面デザインリソースファイルを作成する • 「枠の画面デザイン」に、ListViewを使用して一覧形式の画面デザイ ンを作成する • 「枠の画面デザイン」と「行の画面デザイン」は、プログラムによっ て関連付けを行う 枠の画面デザイン 行の画面デザイン 枠を表す 画面デザイン 行を表す 画面デザイン ・・・ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 200
  • 201. 5.3.画面遷移の方法 一覧形式の画面を追加する • 枠の画面デザインを作成する方法 1. 枠デザインのリソースファイルをres/layout/に新規作成する 2. 1.で作成した画面デザインリソースファイルにListViewを配置する 3. ListViewのプロパティ「id」に「@android:id/list」と設定する • ListViewの機能を使用して一覧表示するには、 「id」に「 @android:id/list」と必ず設定する 枠の画面デザイン 行の画面デザイン ・・・ ■list.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" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 201
  • 202. 5.3.画面遷移の方法 一覧形式の画面を追加する 4. 表示するデータがない場合に、代わりのビューを表示する事が 出来る。この場合、画面デザインに代替表示用のビューを配置 し、 「id」に 「@android:id/empty」と設定する ■list.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" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/empty" /> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 202
  • 203. 5.3.画面遷移の方法 一覧形式の画面を追加する • 行の画面デザインを作成する方法 1. 2. 行デザインのリソースファイルをres/layout/に新規作成する 新規作成した画面デザインリソースファイルを開き、一覧の1行 に表示するビューを配置する ■list_row.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:text="" android:id="@+id/feed_title" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 203
  • 204. 5.3.画面遷移の方法 一覧形式の画面を追加する • 画面のアクティビティクラスを新規作成する – 作成手順 1. Eclipseのメニュー[File]から[new]-[Class]を選択する 1 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 204
  • 205. 5.3.画面遷移の方法 一覧形式の画面を追加する 2. Packageにクラスを作成するパッケージ、Nameに作成するアクティビ ティクラス名を入力する 3. SuperClassに「android.app.Activity」クラスか、Activityクラスのサブク ラスを設定する。作成する画面に応じて、Activityクラスを選択する ※一覧画面を作成する場合は、「android.app.ListActivity」を設定する 4. Finishボタンを押す 一覧画面のActivityを追加する為、 SuperClassに 「android.app.ListActivity」を設 定 2 3 4 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 205
  • 206. 5.3.画面遷移の方法 一覧形式の画面を追加する 5. 4.で追加したアクティビティクラスにActivity#onCreateメソッドを実 装する 6. Activity#onCreateメソッドで、親クラスのonCreateメソッドを実行す る 7. 親クラスのonCreateメソッド実行後、Activity#setContentViewメソッド を実行し、画面デザインを表示する。 Activity#setContentViewメソッ ドの引数は追加した画面デザインのidをRクラスから取得し、設定す る package jp.oesf.mtgeduwg.training.rssreader; import android.app.ListActivity; • サンプルコード import android.os.Bundle; public class RssListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); } ・・・5 ・・・6 ・・・7 } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 206
  • 207. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 実習のテーマ – 一覧画面の画面デザインを作成する • 表示データが存在する場合、RSSフィードのタイトルを表示する • 表示データが存在しない場合は「データがありません」と表示する RSSフィード の タイトル 表示データがある場合 表示データがない場合 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 207
  • 208. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 実習の手順 1. 一覧画面の枠デザインの画面デザインリソースファイル (res/layout/list.xml)を新規作成する 2. 枠デザインの画面デザインリソースファイルをレイアウトエデ ィタで開き、ListViewを配置する 3. 一覧に表示するデータがない場合にメッセージを表示する TextViewを配置する 配置したListView、TextViewのプロパティを設定する 4. 5. 一覧に表示するデータがない場合のメッセージを文字列リソー スファイル(res/values/strings.xml)に追加する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 208
  • 209. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 6. 7. 3.で配置したTextViewのtextプロパティを、5.で文字列リソースフ ァイルに追加した設定を参照するように変更する 一覧画面の行デザインの画面デザインリソースファイル (res/layout/list_row.xml)を新規作成する 行デザインのリソースファイルをレイアウトエディタで開き、 RSSフィードのタイトル文字を設定するTextViewを配置する 9. 8.で配置したTextViewのプロパティを変更する 10. RssListActivityを新規作成する 8. • RssListActivityは、ListActivityを継承したクラスとして作成する 11. RssListActivity#onCreateメソッドをオーバーライドする 12. RssListActivity#onCreateメソッドでsetContentViewを実行し、 res/layout/list.xmlの画面デザインリソースファイルを読み込む This material is licensed under the Creative Commons License BY-NC-SA 4.0. 209
  • 210. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 – 設定情報 1 • 以下のリソースファイルを作成する 画面 リソースファイル 内容 全体 • データを一覧形式で表示するListViewを配置する • 表示データが存在しない場合に代替表示するTextViewを配置す る res/layout/list_row.xml 一覧画面 res/layout/list.xml • RSSフィードのタイトルを表示するビューを配置する res/values/strings.xml • 代替表示するTextViewに表示する文字列設定を追加する – 設定情報 2 • 文字列リソースファイル(res/values/strings.xml)に、以下の文字列を 追加する ※ 文字列リソースファイルに追加する形式は<string name=“キー”>値</string>となる キー 値 empty データがありません This material is licensed under the Creative Commons License BY-NC-SA 4.0. 210
  • 211. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 – 設定情報 3 • 以下のクラス、メソッドを実装する 画面 クラス メソッド 概要 一覧画面 RssListActivity onCreate • setContentViewメソッドでres/layout/list.xmlの画面デザ インを表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 211
  • 212. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 – 設定情報 4 • 枠の画面デザインに配置するビューのプロパティに以下の情報を設定 する # ビュー プロパティ 1 ListView 1. android:id=“@android:id/list” 2. android:layout_width=“fill_parent” 3. android:layout_height=“wrap_content” 2 1 TextView 1. 2. 3. 4. android:id=“@android:id/empty” android:layout_width=“wrap_content” android:layout_height=“wrap_content” android:text=“@string/empty” 2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 212
  • 213. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 – 設定情報 5 • 行の画面デザインに配置するビューのプロパティに以下の情報を設定 する 1 # ビュー プロパティ 1 TextView 1. android:id=“@+id/feed_title” 2. android:layout_width=“wrap_content” 3. android:layout_height=“wrap_content” This material is licensed under the Creative Commons License BY-NC-SA 4.0. 213
  • 214. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 確認方法 – 下記のリソースファイル、Javaソースコードを実習の答えと比較 を行い、ソースベースで確認する • リソースファイル – res/layout/list.xml – res/layout/list_row.xml – res/layout/strings.xml • Javaソースコード – RssListActivity.java This material is licensed under the Creative Commons License BY-NC-SA 4.0. 214
  • 215. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 実習の答え – res/layout/list.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" > <ListView android:id="@android:id/list" android:layout_width="fill_parent" android:layout_height="wrap_content" /> <TextView android:id="@android:id/empty" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/empty" /> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 215
  • 216. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 実習の答え – res/layout/list_row.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout android:id="@+id/LinearLayout" android:layout_width="fill_parent" android:layout_height="fill_parent" xmlns:android="http://schemas.android.com/apk/res/android"> <TextView android:text="" android:id="@+id/feed_title" android:layout_width="wrap_content" android:layout_height="wrap_content"> </TextView> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 216
  • 217. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 実習の答え – res/values/strings.xml <?xml version="1.0" encoding="utf-8"?> <resources> <string name="app_name">RssReader</string> <string name="go_to_list_page_button_label">一覧表示</string> <string name="empty">データがありません</string> </resources> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 217
  • 218. 実 習 5.3.画面遷移の方法 一覧形式の画面を追加する 実習 3 • 実習の答え – RssListActivity package jp.oesf.mtgeduwg.training.rssreader; import android.app.ListActivity; import android.view.View; import android.os.Bundle; public class RssListActivity extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.list); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 218
  • 219. 5.3.画面遷移の方法 インテントを使用して画面遷移を行 う • 画面遷移を行うには – 仕組み • • 画面遷移先の情報から、インテントオブジェクトを作成する 作成したインテントオブジェクトを使用してActivityを呼び出すメソ ッドを実行すると、遷移先画面を表示する事が出来る • 新たに作成した画面へ画面遷移する場合は、遷移先画面のアクティ ビティがAndroidManifest.xmlに登録しなければならない 画面A インテン ト インテントオブジェクト生 成 インテント 画面B • 画面"B"を呼び出 す Android インテン ト 画面Aから画面Bへ画面遷移するイメージ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 219
  • 220. 5.3.画面遷移の方法 インテントを使用して画面遷移を行 う • インテントを使用して、画面遷移を行う方法 1. インテントオブジェクトを作成する • Intentの引数に、遷移元(自画面 の)アクティビティのオブジェクト 、遷移先アクティビティのクラス情報を与えて生成する 2. Activity#startActivityメソッドを実行する。メソッドの引数には1. で作成したIntentオブジェクトを与える • サンプルソース(SampleActivityからNextActivityに遷移する例) import android.app.Activity; import android.view.View; import android.view.View.OnClickListener; import android.content.Intent; public class SampleActivity extends Activity implements OnClickListener { public void onClick(View view) { Intent intent = new Intent(this,NextActivity.class); ・・・1 startActivity(intent); ・・・2 } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 220
  • 221. 5.3.画面遷移の方法 インテントを使用して画面遷移を行 う • 追加した画面をAndroidManifest.xmlの設定に追加する – 追加した画面をアプリケーションから利用できるようにするには AndroidManifest.xmlへ設定をする • 設定方法は「 4.4.1.アプリケーションにアクティビティを追加」を参照 – AndroidManifest.xmlへの設定を行わなかった場合、画面遷移実行時 にエラーが発生する • サンプルコード(NextActivityをAndroidManifest.xmlに追加する場合) <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.oesf.sample” android:versionCode="1” android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".SampleActivity” android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> NextActivityクラスの設 <category android:name="android.intent.category.LAUNCHER" /> 定を追加する </intent-filter> </activity> <activity android:name="NextActivity" android:label="@string/next_activity_title"></activity> </application> <uses-sdk android:minSdkVersion=“7" /> </manifest> 221 This material is licensed under the Creative Commons License BY-NC-SA 4.0.
  • 222. 実 習 5.3.画面遷移の方法 インテントを使用して画面遷移を行う 実習 4 • 実習のテーマ – メニュー画面の「一覧表示」ボタンを押した時、一覧画面へ画面 遷移する処理を作成する 一覧表示 クリック 画面遷移する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 222
  • 223. 実 習 5.3.画面遷移の方法 インテントを使用して画面遷移を行う 実習 4 • 実習の手順 1. 2. 3. RssReaderActivityクラスに「一覧表示」ボタンを押した時に、一覧画面 へ遷移するIntentオブジェクトを生成する Activity#startActivityメソッドを使用して、一覧画面へ画面遷移する処理 を実行する 一覧画面のRssListActivityクラスの設定をAndroidManifest.xmlに追加する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 223
  • 224. 実 習 5.3.画面遷移の方法 インテントを使用して画面遷移を行う 実習 4 – 設定情報 • 以下のクラス、メソッドを実装する 画面 クラス メソッ ド メニュー画 面 RssReaderActivity onClick 概要 • 一覧表示ボタンがクリックされた時に、一覧表示画面を 起動する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 224
  • 225. 実 習 5.3.画面遷移の方法 インテントを使用して画面遷移を行う 実習 4 • 確認方法 – メニュー画面の「一覧表示」ボタンを押した時に一覧画面に画面 遷移することを確認する – 一覧に表示するデータがないため、「データがありません」メッセージが表 示される 一覧表示 クリック 画面遷移する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 225
  • 226. 実 習 5.3.画面遷移の方法 インテントを使用して画面遷移を行う 実習 4 • 実習の答え – RssReaderActivity#onClick package jp.oesf.mtgeduwg.training.rssreader; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; public class RssReaderActivity extends Activity implements OnClickListener { ・・・・・・・・ public void onClick(View view) { if (R.id.list_button == view.getId()) { Intent intent = new Intent(this, RssListActivity.class); startActivity(intent); } } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 226
  • 227. 実 習 5.3.画面遷移の方法 インテントを使用して画面遷移を行う 実習 4 • 実習の答え – AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="jp.oesf.mtgeduwg.training.rssreader" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name" android:debuggable="true"> <activity android:name="RssReaderActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN"></action> <category android:name="android.intent.category.LAUNCHER"></category> </intent-filter> </activity> <activity android:label="@string/app_name" android:name="RssListActivity"></activity> </application> <uses-sdk android:minSdkVersion=“7" /> <uses-permission android:name="android.permission.INTERNET"></uses-permission> </manifest> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 227
  • 228. 5.4.データベースの全件検索と一覧表示 • アプリケーションからデータベース(SQLite)を操作し、 データを検索する方法を学ぶ • 実習を通じて以下の事を習得する • AndroidアプリケーションからSQLiteを操作する方法 • データベースからデータを検索する方法 • 検索結果を一覧画面に表示する方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 228
  • 229. 5.4.データベースの全件検索と一覧表示 • SQLiteとは? – 軽量データベース • データ保存に単一ファイルを利用するシンプルなデータベース • データベースの操作にSQLを使用できる • トランザクションを管理できる • 仕様、ソースコードが公開されていて、多くの言語でドライバが開発 されている – 参考 • http://www.sqlite.org/ • http://ja.wikipedia.org/wiki/SQLite This material is licensed under the Creative Commons License BY-NC-SA 4.0. 229
  • 230. 5.4.データベースの全件検索と一覧表示 • データベース(SQLite)を操作するには – Androidが提供する下記のクラスを使用する • SQLiteOpenHelperクラス – データベースを作成する – テーブルを作成する – データベースとの接続(オープン)、切断(クローズ)を行う • SQLiteDatabaseクラス – テーブルの検索、追加、更新、削除を行う – 指定のSQLを実行する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 230
  • 231. 5.4.データベースの全件検索と一覧表示 • データベースからデータ検索を行う処理の全体像 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 231
  • 232. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • SQLiteOpenHelperを使用してデータベースを作成するには – 仕組み • データベースを作成するには、SQLiteOpenHelperクラスを継承するサ ブクラスを作成しなければならない • 作成したサブクラスのコンストラクタでSQLiteOpenHelperクラスのコ ンストラクタを実行する事でSQLiteのデータベースファイルが作成さ れる • データベースファイルが既に存在する場合、2回目以降のコンストラ クタが実行されてもファイルが作成されない。ファイルが存在しない 場合のみデータベースファイルが作成される This material is licensed under the Creative Commons License BY-NC-SA 4.0. 232
  • 233. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • SQLiteOpenHelperを使用してテーブルを作成するには – 仕組み • SQLiteOpenHelperでデータベースが作成された時、onCreateメソッド が実行される。onCreateメソッドでテーブルを作成するSQLを実行す るようすることで、テーブルを作成する事が出来る • SQLを実行するには、SQLiteDatabaseオブジェクトが必要である。 SQLiteDatabaseオブジェクトはSQLiteOpenHelper#onCreateで与えられ る為、与えられたSQLiteDatabaseオブジェクトを使用してSQLを実行す る This material is licensed under the Creative Commons License BY-NC-SA 4.0. 233
  • 234. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • SQLiteOpenHelperを使用してデータベース、テーブルを作 成する方法 1. 2. 3. SQLiteOpenHelperクラスのサブクラスを作成する 1.で作成したクラスのコンストラクタでSQLiteOpenHelperクラス のコンストラクタを実行し、データベースを作成する SQLiteOpenHelper が定める2つのメソッドを実装する • onCreate • onUpgrade : テーブルを作成する処理を実装するメソッド : テーブル定義を更新する処理を実装するメソッド ※ 上記メソッドはSQLiteOpenHelperで実装が義務付けられている為、実装し ていない場合はコンパイルエラーになる 4. SQLiteOpenHelper#onCreateで、テーブルを生成するSQL文 (CREATE TABLE文)を実行する • SQL文の実行方法 1. 2. テーブルを生成するSQL文の文字列を作成する onCreateメソッド第一引数 SQLiteDatabase database のexecSQLメソッドに SQL文の文字列を与え、実行する 234 This material is licensed under the Creative Commons License BY-NC-SA 4.0.
  • 235. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • サンプルコード import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; サンプルコードでは、サブク ラス名を 「SampleSQLiteOpenHelper」と している public class SampleSQLiteOpenHelper extends SQLiteOpenHelper { ・・・1 ・・・2 public SampleSQLiteOpenHelper(Context context) { // データベースを作成する(データベース名は「 SAMPLE_DATABASE 」) super(context, “SAMPLE_DATABASE”, null,1); サンプルコードでは、 } コンストラクタ第4引数 // テーブルを作成する処理を実装するメソッド は1を固定で設定する @Override public void onCreate(SQLiteDatabase database) { // CREATE TABLE文を実行 database.execSQL(“CREATE TABLE SAMPLE_TABLE(_id INTEGER,name TEXT);”); ・・・4 } ・・・3 // テーブル定義を更新する処理を実装するメソッド @Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 235
  • 236. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • データベースからデータを検索するには – 仕組み • データベースからデータの検索をするにはSQLiteDatabaseオブジェクト が必要である • SQLiteDatabase#queryメソッドを実行する事で、結果をCursorクラスで 取得する事ができる • SQLiteDatabaseオブジェクトは、SQLiteOpenHelperのメソッドで取得す る。用途によってSQLiteDatabaseの取得メソッドが2種類存在する – getReadableDatabase ・・・ 読込専用のSQLiteDatabaseオブジェクトを取 得する » 検索のみ実行する場合に使用する – getWritableDatabase ・・・ 書込可能のSQLiteDatabaseオブジェクトを取 得する » テーブルへの書き込み処理を実行する場合に使用する ※ 検索のみを実行する場合は、getReadableDatabaseメソッドを使用する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 236
  • 237. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • SQLiteDatabaseクラスは、検索を実行するqueryメソッド以外に下記の メソッドを提供する。これらメソッドを使用することで、データベー スの情報を取得・更新することができる メソッド 概要 query() データを検索する insert() データを登録する update() データを更新する delete() データを削除する execSQL() 任意のSQL文を実行してデータを操作する 表. SQLiteDatabaseの代表的なメソッドと概 要 ■SQLiteDatabaseに関する詳細はAndroid Developersのリファレンスを参照 http://developer.android.com/intl/ja/reference/android/database/sqlite/SQLiteDatabase.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 237
  • 238. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • SQLiteDatabase#queryメソッドを使用してデータを検索する 方法 1. 2. 3. 4. SQLiteOpenHelperサブクラスのオブジェクトを生成する SQLiteOpenHelper#getReadableDatabaseメソッドを使用して、 SQLiteDatabaseオブジェクトを取得する SQLiteDatabase#queryメソッドを実行し、検索結果のCursorオブジ ェクトを取得する ActivityでCursorを使用する場合は、Activity#startManagingCurosor を実行し、Cursorの管理をActivityに移譲する ※ ActivityにCursorの管理を移譲する事でCursorオブジェクトの破棄等の管 理を自動的に行ってくれる 5. SQLiteDatabase#closeメソッドを実行しデータベースからクローズ する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 238
  • 239. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • サンプルコード SampleSQLiteOpenHelper databaseOpenHelper = new SampleSQLiteOpenHelper(this); SQLiteDatabase database = null; Cursor cursor = null; try { // 読込専用のSQLiteDatabaseオブジェクトを取得する database = databaseOpenHelper.getReadableDatabase(); // 検索を実行し、検索結果のCursorオブジェクトを取得する cursor = database.query(“SAMPLE_TABLE", null, null, null, null, null, null); // Cursorオブジェクトの管理をActivityに移譲する startManagingCursor(cursor); } finally { if (database != null) { // データベースから切断する database.close(); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. ・・・2 ・・・3 ・・・4 ・・・5 239 ・・・1
  • 240. 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する • SQLiteDatabase#execSQLメソッドを使用して指定のSQLを実 行する方法 – サンプルコード(CREATE TABLE文を実行する例) import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class SampleSQLiteOpenHelper extends SQLiteOpenHelper { ・・・・・・・・ // テーブルを作成する処理を実装するメソッド @Override public void onCreate(SQLiteDatabase database) { // CREATE TABLE文を実行 database.execSQL(“CREATE TABLE SAMPLE_TABLE(_id INTEGER,name TEXT);”); } ・・・・・・・・ } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 240
  • 241. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 • 実習のテーマ – 一覧画面の起動時に、データベース、テーブルを作成する – 検索テスト用データベースファイルをエミュレータに転送する。 その後、テーブルの検索を実行し、Cursorオブジェクトを取得す る ※SQLiteOpenHelperのサブクラスは、DatabaseOpenHelperというクラス としてスケルトンプロジェクトにて提供 ※検索テスト用データベースファイルも同様に提供 ※検索を行うテーブルは、RSS_FEEDというテーブルを使用する。 RSS_FEEDテーブルを作成するSQL文は、DatabaseOpenHelperで定数と して提供 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 241
  • 242. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 • 実習の手順 1. DatabaseOpenHelper#onCreateメソッドで、RSS_FEEDテーブルを 作成するSQL文を実行する • SQL文はスケルトンプロジェクトで提供する 2. RssListActivity#onResumeメソッドで以下の処理を実行する 1. 2. 3. 4. DatabaseOpenHelper#getReadableDatabaseメソッドを実行し、 SQLiteDatabaseオブジェクトを取得する SQLiteDatabaseオブジェクト取得後、オープンログを出力する ログメッセージには「Succeeded in open the database.」 を出力する オープンログ出力後、SQLiteDatabase#queryメソッドを実行し、 RSS_FEEDテーブルの検索を実行する SQLiteDatabase#queryメソッド実行後、 queryメソッドの戻り値の Cursorオブジェクトがnull以外の場合、検索ログを出力する ログメッセージには「Got cursor.」 を出力する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 242
  • 243. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 5. 6. 7. 検索ログ出力後、データベースをクローズする データベース切断後、クローズログを出力する ログメッセージには「Succeeded in close the database. 」を出力する DDMSを使用して、検索テスト用データベースファイル(SQLiteの ファイル)をエミュレータに送信する ※ ファイルの転送方法は、次ページに記載 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 243
  • 244. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 ※ DDMSを使用して検索テスト用データベースファイルをエミュレ ータに転送する手順 1. Eclipseのメニュー[Window]-[Open Perspective]-*Other…+を選択し、 「Open Perspective 」ウィンドウを開く 2. Open Perspectiveウィンドウから「DDMS」を選択し、DDMSパースペ クティブを開く 2 1 Other… を選択 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 244
  • 245. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 3. DDMSパースペクティブのFile Explorerビューを開き、 「 data/data/jp.oesf.mtgeduwg.training.rssreader/databases 」を選択し、 「Push a file onto the device」ボタンを押す 4. ファイル選択ダイアログで「C:android_trainingtestdata 」に格納され ているdataを選択する 4 3 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 245
  • 246. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 – 設定情報 1 • 以下のクラス、メソッドを実装する 画面 クラス メソッド - DatabaseOpenHelpe r コンストラクタ 概要 • データベースを作成する • データベース名は「data」 onCreate 一覧画面 RssListActivity • データベースにテーブルを作成する • RSS_FEEDテーブル onResume • データベースへ接続する • RSS_FEEDテーブルを全件検索し、検索結果を 得る • データベースから切断する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 246
  • 247. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 – 設定情報 2 • 以下のテーブルを作成する – RSS_FEED ※ 実習アプリケーションのDatabaseOpenHelperクラスでテーブルを作成するSQL文を提供して いる 列名 型 備考 • プライマリキー • オートインクリメント _id INTEGER GUID TEXT • RSSフィードに割り当てられる識別子 TITLE TEXT • タイトル PUBLISH_DATE TEXT • 配信日時 DESCRIPTION TEXT • 詳細内容 LINK TEXT • リンク SENDER_NAME TEXT • 配信元の名前 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 247
  • 248. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 • 確認方法 – 一覧画面を起動した時、下記のログ出力されていることをLogCat で確認する • オープンログ • 検索ログ • クローズログ 「Succeeded in open the database.」 「Got cursor. 」 「Succeeded in close the database. 」 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 248
  • 249. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 • 実習の答え – DatabaseOpenHelper package jp.oesf.mtgeduwg.training.rssreader.helper; import android.content.Context; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.util.Log; public class DatabaseOpenHelper extends SQLiteOpenHelper { /** データベースファイル名 */ private static final String DATABASE_NAME = "data"; /** RSSフィードテーブル作成SQL */ private static final String CREATE_RSS_FEED_TABLE = "CREATE TABLE RSS_FEED(" + "_id INTEGER PRIMARY KEY AUTOINCREMENT," + "SENDER_NAME TEXT, URL TEXT, TITLE TEXT, PUBLISH_DATE TEXT, DESCRIPTION TEXT, LINK TEXT," + "GUID TEXT);“; This material is licensed under the Creative Commons License BY-NC-SA 4.0. 249
  • 250. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 • 実習の答え – DatabaseOpenHelper(続き) public DatabaseOpenHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase database) { database.execSQL(CREATE_RSS_FEED_TABLE); } @Override public void onUpgrade(SQLiteDatabase database, int oldVersion, int newVersion) { } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 250
  • 251. 実 習 5.4.データベースの全件検索と一覧表示 データベースにテーブルを作成する 実習 5 • 実習の答え – RssListActivity#onResume public class RssListActivity extends ListActivity { ・・・・・・・・ @Override protected void onResume() { super.onResume(); DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper(this); SQLiteDatabase database = null; Cursor cursor = null; try { database = databaseOpenHelper.getReadableDatabase(); Log.v("RssListActivity", "Succeeded in open the database."); cursor = database.query("RSS_FEED", null, null, null, null, null, null); startManagingCursor(cursor); if(cursor != null){ Log.v("RssListActivity", "Got cursor."); } } finally { if (database != null) { database.close(); Log.v("RssListActivity", "Succeeded in close the database."); } } } This material is licensed under the Creative } Commons License BY-NC-SA 4.0. 251
  • 252. 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する • データベースから検索したデータを、画面に一覧形式で 表示するには – 仕組み • Cursorから取得するデータベースのデータを画面に一覧表示するには 、ListViewとListActivityクラスが必要である • Cursorの情報を一覧表示する為に、Adapterという仕組みをAndroidは 提供している • CursorオブジェクトとListActivityをAdapterを使用して関連付けを行う ことで、Cursorの情報を画面のListViewに表示する Cursorオブジェクト データ 1件目 ListView データ 2件目 データ 3件目 ・・ ・・ データ N件目 ・ ・ ・ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 252
  • 253. 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する • Cursorオブジェクトの内容を一覧画面に表示する方法 1. 2. CursorオブジェクトからSimpleCursorAdapterオブジェクトを生成 する ListActivity#setListAdapterメソッドを使用し、 SimpleCursorAdapter オブジェクトをListActivityに登録する • サンプルコード SimpleCursorAdapterオブジェクトを生成する public class RssListActivity extends ListActivity { には、以下の引数を使用する ・・・・・・・・ @Override • アクティビティ protected void onResume() { • 行デザインのid ・・・・・・・・ super.onResume(); • カーソル DatabaseOpenHelper databaseOpenHelper = • カーソルから取得するデータのキー new DatabaseOpenHelper(this); SQLiteDatabase database = null; • 取得したデータを表示するための、行デザ Cursor cursor = null; インに配置したビューのid try { database = databaseOpenHelper.getReadableDatabase(); cursor = database.query("RSS_FEED", null, null, null, null, null, null); startManagingCursor(cursor); SimpleCursorAdapter rssFeedCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_row, cursor, ・・・1 new String[] {"TITLE"}, new int[] {R.id.feed_title}); ・・・2 setListAdapter(rssFeedCursorAdapter); 253 ・・・・・・・・ This material is licensed under the Creative Commons License BY-NC-SA 4.0.
  • 254. 実 習 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する 実習 6 • 実習のテーマ – データベースに格納されているRSSフィードデータの検索を実行し 、RSSフィードのタイトルを一覧画面に一覧表示する 画面遷移 This material is licensed under the Creative Commons License BY-NC-SA 4.0. RSSフィード の タイトル 254
  • 255. 実 習 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する 実習 6 • 実習の手順 1. 2. 実習5で取得したCursorオブジェクトからSimpleCursorAdapterオ ブジェクトを生成する SimpleCursorAdapterオブジェクト生成後、 RssListActivity#setListAdapterメソッドを実行し、RssListActivityに SimpleCursorAdapterオブジェクトを登録する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 255
  • 256. 実 習 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する 実習 6 – 設定情報 • 以下のクラス、メソッドを実装する 画面 クラス メソッド 概要 一覧画面 RssListActivity onResume • データベースからRSSフィードを検索し、一覧形式で一 覧画面に表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 256
  • 257. 実 習 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する 実習 6 • 確認方法 – メニュー画面から一覧画面に画面遷移した時に、一覧画面にRSSフ ィードのタイトルが一覧表示されることを確認する メニュー画面 で一覧表示ボ タンをクリッ クする 画面遷移 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 257
  • 258. 実 習 5.4.データベースの全件検索と一覧表示 データを一覧形式で表示する 実習 6 • 実習の答え – RssListActivity#onResume public class RssListActivity extends ListActivity { ・・・・・・・・ @Override protected void onResume() { super.onResume(); DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper(this); SQLiteDatabase database = null; Cursor cursor = null; try { database = databaseOpenHelper.getReadableDatabase(); cursor = database.query("RSS_FEED", null, null, null, null, null, null); startManagingCursor(cursor); SimpleCursorAdapter rssFeedCursorAdapter = new SimpleCursorAdapter(this, R.layout.list_row, cursor, new String[] {"TITLE"}, new int[] {R.id.feed_title}); setListAdapter(rssFeedCursorAdapter); } finally { if (database != null) { database.close(); } } } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 258
  • 259. 5.5.データベースの1件検索と画面表示 • データベースから条件を指定して絞り込み検索する方法を 学ぶ • 実習を通じて以下の事を習得する • • • • • 一覧形式で表示したデータから、1件選択したことを認識する方法 アクティビティ間でパラメータを受け渡す方法 データベースから絞り込み検索をする方法 検索したデータから値を取り出す方法 プログラムから画面のビューのプロパティを設定する方法 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 259
  • 260. 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す • 一覧形式で表示したデータから、1件選択したことを認識 するには – 仕組み • ListViewで表示しているデータから1件クリックして選択すると、アク ティビティの特定のメソッドが呼び出される This material is licensed under the Creative Commons License BY-NC-SA 4.0. 260
  • 261. 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す • 一覧形式で表示したデータから、1件選択した事を認識する 方法 – 一覧形式で表示するアクティビティに、ListActivity#onListItemClickメ ソッドを実装する • public class RssListActivity extends ListActivity { サンプルコード ・・・・・・・・ @Override protected void onListItemClick(ListView listView, View view, int position, long id) { super.onListItemClick(listView, view, position, id); // 1件選択した時に行う処理を記述する } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 261
  • 262. 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す • アクティビティ間でパラメータを受け渡すには – 仕組み • アクティビティ間でパラメータを受け渡すには、画面遷移の際に作成 するIntentオブジェクトに受け渡したいパラメータを設定する • パラメータはキー、値の組み合わせで作成する • 遷移先画面は、アクティビティのメソッドを使用して送付された Intentオブジェクトを取得し、起動元画面がパラメータを設定する際 に使用したキーを使用して、Intentオブジェクトから値を取得する アクティビティA インテントにパラメータ (キーと値)を詰める インテン ト •“キー”, “値” アクティビティB インテン ト インテン ト Android • インテントからパラ メータを取得する • パラメータのキーを指 定して値を取り出す This material is licensed under the Creative Commons License BY-NC-SA 4.0. 262
  • 263. 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す • インテントを使用してパラメータを受け渡す方法 – 起動元アクティビティ 起動元アクティビティでIntentオブジェクトを生成する IntentオブジェクトにIntent#putExtraメソッドを使用してパラメータ を追加する 1. 2. – パラメータは「キー、値」のセットで設定する 3. Activity#startActivityメソッドを使用して、起動先アクティビティを 呼び出す • サンプルコード(起動元アクティビティ) public class SampleListActivity extends ListActivity { ・・・・・・・・ @Override protected void onListItemClick(ListView listView, View view, int position, long id) { Intent intent = new Intent(this, NextActivity.class); intent.putExtra(“id”, id); startActivity(intent); ・・・1 ・・・2 ・・・3 } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 263
  • 264. 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す – 起動されたアクティビティ 1. 起動されたアクティビティで、Activity#getIntentメソッドを使用して 、インテントオブジェクトを取得する 2. Intent#getExtrasメソッドを使用して、Intentオブジェクトに格納され ているパラメータを取得する 3. データの型に応じたgetterメソッドを使用して、パラメータからキー を指定し、値を取得する • サンプルコード(onCreateでパラメータを取得する例) public class NextActivity extends Activity { ・・・・・・・・ @Override public void onCreate(Bundle savedInstanceState) { Intent intent = getIntent(); Bundle extras = intent.getExtras(); long id = extras.getLong(“id”); } } ・・・1 ・・・2 ・・・3 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 264
  • 265. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 • 実習のテーマ – 一覧画面からRSSフィードを1件選択した時、詳細画面へ画面遷移 する。その際、一覧画面から選択されたRSSフィードの「id」を詳 細画面に受け渡し、詳細画面起動時に受け取ったidをログに出力 する 画面遷移 一覧画面か ら1件クリッ クする パラメータに idを受け渡す This material is licensed under the Creative Commons License BY-NC-SA 4.0. 265
  • 266. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 • 実習の手順 1. 詳細画面の画面デザインリソースファイル(res/layout/detail.xml )を新規作成する 2. 詳細画面の画面デザインリソースファイルをレイアウトエディ タで開き、下記の順番にTextViewを配置する タイトル 日付 配信元名 内容 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 266
  • 267. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 3. 4. 5. 6. 7. 8. 9. 詳細画面に配置したTextViewのプロパティを設定する RssListActivity#onListItemClickメソッドを実装する RssListActivity#onListItemClickメソッドで、DetailActivityに遷移す るIntentオブジェクトを生成する 作成したIntentオブジェクトに、 RssListActivity#onListItemClickメ ソッドの引数「id」を設定する Activity#startActivityメソッドを使用してDetailActivityに遷移する DetailActivity#onResumeメソッドでIntentオブジェクトを取得する 取得したIntentオブジェクトから「id」の値を取得し、ログ出力 する • ログ出力フォーマット – tag – message : DetailActivity : id = <取得したid> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 267
  • 268. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 – 設定情報 1 • 以下のリソースファイルを作成する 画面 詳細画面 リソースファイル res/layout/detail.xml 内容 • RSSフィードのタイトル、配信日時、配信元名、内容を表示する TextViewを配置する – 設定情報 2 • 以下のリソースファイルを作成する 画面 クラス メソッド 概要 一覧画面 RssListActivity onListItemClick • 一覧画面で選択したRSSフィードのidを詳細画面に渡し、 詳細画面を起動する 詳細画面 DetailActivity onCreate • setContentViewメソッドでres/layout/detail.xmlの画面デザ インを表示する onResume • 一覧画面から渡ってきたRSSフィードのidをログに出力す る This material is licensed under the Creative Commons License BY-NC-SA 4.0. 268
  • 269. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 – 設定情報 3 • ビューのプロパティに以下の情報を設定する 1 2 3 4 # ビュー プロパティ 1 TextView 1. android:id=“@+id/title” 2. android:layout_width=“wrap_content” 3. android:layout_height=“wrap_content” 2 TextView 1. android:id=“@+id/publish_date” 2. android:layout_width=“wrap_content” 3. android:layout_height=“wrap_content” 3 TextView 1. android:id=“@+id/sender_name” 2. android:layout_width=“wrap_content” 3. android:layout_height=“wrap_content” 4 TextView 1. android:id=“@+id/description” 2. android:layout_width=“wrap_content” 3. android:layout_height=“wrap_content” This material is licensed under the Creative Commons License BY-NC-SA 4.0. 269
  • 270. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 – 設定情報 4 • 以下のクラス、メソッドを実装する 画面 クラス メソッド 概要 一覧画面 RssListActivity onListItemClick • 一覧画面で選択したRSSフィードのidを詳細画面に渡し、 詳細画面を起動する 詳細画面 DetailActivity onResume • 一覧画面から渡ってきたRSSフィードのidをログに出力す る This material is licensed under the Creative Commons License BY-NC-SA 4.0. 270
  • 271. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 • 確認方法 – 一覧画面で表示しているRSSフィードから1件を選択した時、詳細 画面に画面遷移することを確認する – 選択したRSSフィードのidがログに出力されている事をLogCatで確 認する 画面遷移 一覧画面 から1件ク リックす る 選択したRSSフィードのidを ログに出力する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 271
  • 272. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 • 実習の答え – res/layout/detail.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android=http://schemas.android.com/apk/res/android android:id="@+id/LinearLayout“ android:layout_width="fill_parent“ android:layout_height="fill_parent“ android:orientation="vertical“> <TextView android:id="@+id/title“ android:layout_width="wrap_content“ android:layout_height="wrap_content“></TextView> <TextView android:id="@+id/publish_date“ android:layout_width="wrap_content“ android:layout_height="wrap_content"></TextView> <TextView android:id="@+id/sender_name“ android:layout_width="wrap_content“ android:layout_height="wrap_content"></TextView> <TextView android:id="@+id/description“ android:layout_width="wrap_content“ android:layout_height="wrap_content"></TextView> </LinearLayout> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 272
  • 273. 実 習 5.5.データベースの1件検索と画面表示 画面間でパラメータを受け渡す 実習 7 • 実習の答え – RssListActivity#onListItemClick public class RssListActivity extends ListActivity { ・・・・・・・・ @Override protected void onListItemClick(ListView listView, View view, int position, long id) { super.onListItemClick(listView, view, position, id); Intent intent = new Intent(this, DetailActivity.class); intent.putExtra("id", id); startActivity(intent); } } – DetailActivity#onResume public class DetailActivity extends Activity { ・・・・・・・・ @Override protected void onResume() { super.onResume(); Intent intent = getIntent(); Bundle extras = intent.getExtras(); long id = extras.getLong("id"); Log.v("DetailActivity", "id = " + id); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 273
  • 274. 5.5.データベースの1件検索と画面表示 データを絞り込み検索する • データベースから、条件を指定してデータを検索するに は – 仕組み • データベースの検索処理では、与えた条件に該当するデータのみを取 得する事ができる • 与える条件は、SQLのWhere句の書式でプログラムから指定する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 274
  • 275. 5.5.データベースの1件検索と画面表示 データを絞り込み検索する • 条件を指定した検索を実行する方法 1. SQLiteDatabase#queryメソッドの引数で、絞り込み条件を指定す る • 絞り込み条件には、SQLのWhere句の書式で記述する – 「_id」キーの条件を指定するには、”_id=<条件値>”とする • サンプルコード SampleSQLiteOpenHelper databaseOpenHelper = new SampleSQLiteOpenHelper(this); SQLiteDatabase database = null; Cursor cursor = null; try { int id = 1; database = databaseOpenHelper.getReadableDatabase(); cursor = database.query(“SAMPLE_TABLE", null, "_id=" + id, null, null, null, null); } finally { if (database != null) { database.close(); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 275 ・・・1
  • 276. 5.5.データベースの1件検索と画面表示 データを絞り込み検索する • 検索したデータから値を取り出す方法 データベースからデータを検索し、検索条件に合致するデータ をもつCursorオブジェクトが取得する 取得したCursorで Cursor#moveToFirstメソッドを実行し、1件のデ ータの取得する 1. 2. • データが読み出せなかった場合は、各メソッドの戻り値がfalseとなる • サンプルコード public class SampleActivity extends Activity { ・・・・・・・・ @Override public void onResume() { super.onResume(); SampleSQLiteOpenHelper databaseOpenHelper = new SampleSQLiteOpenHelper(this); SQLiteDatabase database = databaseOpenHelper.getReadableDatabase(); Cursor cursor = database.query(“SAMPLE_TABLE", null, “_id = ” + id , null, null, null, null); cursor.moveToFirst(); } } ・・・1 ・・・2 取得データが1件に限定される場合はmoveToFirst()を実行する 複数件のデータを取得する場合はmoveToNext()を使用する ※詳細はAndroid Developersのリファレンスを参照 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 276
  • 277. 5.5.データベースの1件検索と画面表示 データを絞り込み検索する 3. Cursorオブジェクトからデータを1件読み出した後、データ列か ら型に応じたメソッドを使用して値を取得する • データを取得する列名を引数としてCursor#getColumnIndexメソッドを 使用し、列の位置を取得する • 列の位置を引数として取得する値の型に応じたgetterメソッドを使用 し、値を取得する • サンプルコード 値の型 getterメソッド String getString(int columnIndex) int getInt(int columnIndex) short getShort(int columnIndex) long getLong(int columnIndex) double getDouble(int columnIndex) float getFloat(int columnIndex) 表. データ列の型とgetter メソッド(抜粋) public class SampleActivity extends Activity { ・・・・・・・・ @Override protected void onResume() { super.onResume(); SampleSQLiteOpenHelper databaseOpenHelper = new SampleSQLiteOpenHelper(this); SQLiteDatabase database = databaseOpenHelper.getReadableDatabase(); Cursor cursor = database.query(“SAMPLE_TABLE", null, “_id = ” + id , null, null, null, null); cursor.moveToFirst(); // 最初の1件のデータを読み出す int columnIndex=cursor.getColumnIndex("TITLE"); String title=cursor.getString(columnIndex); ・・・3 } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 277
  • 278. 5.5.データベースの1件検索と画面表示 データを絞り込み検索する • プログラムから、画面のビューのプロパティを設定する 方法 1. 2. 3. Activity#findViewByIdメソッドを使用して、ビューのオブジェク トを取得する Activity#findViewByIdは戻り値が抽象クラスViewで戻されるので 、使用しているビュークラスにキャストする 取得したビューオブジェクトのプロパティのsetterメソッドを実 行し、値を設定する • 設定例 – 画面のTextViewのtextプロパティをプログラムから変更する » 手順 • Activity#findViewByIdメソッドを使用して、TextViewオブジェクトを取得 する • view = findViewById(R.id.title); View TextViewオブジェクトのsetTextメソッドを使用して、textプロパティを変 ・・・1 更する TextView textView = (TextView) view; ・・・2 textView.setText("text"); ・・・3 » サンプルコード This material is licensed under the Creative Commons License BY-NC-SA 4.0. 278
  • 279. 実 習 5.5.データベースの1件検索と画面表示 データを絞り込み検索する 実習 8 • 実習のテーマ – 一覧画面から受け渡されたRSSフィードの「id」を検索条件にして 、データベースからRSSフィードの情報を検索し、詳細画面に表示 する • 実習の手順 1. DetailActivityのonResumeメソッドでDatabaseOpenHelperオブジェ クトを生成する DetabaseOpenHelper#getReadableDatabaseメソッドで SQLiteDatabaseオブジェクトを読み込み専用で取得する テーブル名と「id」の絞り込み条件を引数にして、 SQLiteDetabase#queryメソッドを実行し、Cursorオブジェクトを 取得する 2. 3. • • テーブル名 : RSS_FEED This material is = <一覧画面から受け渡されたid※> 279 絞り込み条件 : _id licensed under the Creative Commons License BY-NC-SA 4.0. ※ 一覧画面から渡ってきたRSSフィードの値は、実習7で取得した
  • 280. 実 習 5.5.データベースの1件検索と画面表示 データを絞り込み検索する 実習 8 4. 5. Cursor#moveToFirstメソッドを実行して、Cursorオブジェクトか らデータを1件読み込む Cursor#getColumnIndex, Cursor#getStringメソッドを実行して、1件 のデータから、キーを指定して値を取得する # TITLE title 2 PUBLISH_DATE publish_date 3 SENDER_NAME sender_name 4 7. 値を表示するための、詳細画面のビューid 1 6. Cursorオブジェクトから値を 取り出すキー DESCRIPTION description TextView#setTextメソッドを実行して、取得した値を詳細画面の ビューに設定する SQLiteDetabase#closeメソッドを実行し、データベースオブジェ クトをクローズする This material is licensed under the Creative Commons License BY-NC-SA 4.0. 280
  • 281. 実 習 5.5.データベースの1件検索と画面表示 データを絞り込み検索する 実習 8 – 設定情報 • 以下のクラス、メソッドを実装する 画面 クラス メソッド 概要 詳細画面 DetailActivity onResume • データベースからRSSフィード1件の内容を読 み込み、詳細画面に表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 281
  • 282. 実 習 5.5.データベースの1件検索と画面表示 データを絞り込み検索する 実習 8 • 確認方法 – 一覧画面でRSSフィードを選択した時、一覧画面から詳細画面に 画面遷移し、詳細画面に以下項目が表示されることを確認する • 確認項目 – – – – タイトル 日付 配信元名 内容 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 282
  • 283. 実 習 5.5.データベースの1件検索と画面表示 データを絞り込み検索する 実習 8 • 実習の答え – DetailActivity#onResume public class DetailActivity extends Activity { ・・・・・・・・ @Override protected void onResume() { super.onResume(); DatabaseOpenHelper databaseOpenHelper = new DatabaseOpenHelper(this); SQLiteDatabase database = null; Cursor cursor = null; try { Bundle extras = getIntent().getExtras(); long id = extras.getLong("id"); database = databaseOpenHelper.getReadableDatabase(); cursor = database.query("RSS_FEED", null, "_id=" + id, null, null, null, null); startManagingCursor(cursor); if (!cursor.moveToFirst()) { return; } ((TextView) findViewById(R.id.title)).setText(cursor.getString(cursor.getColumnIndex("TITLE"))); ((TextView) findViewById(R.id.publish_date)).setText(cursor.getString(cursor.getColumnIndex("PUBLISH_DATE"))); ((TextView) findViewById(R.id.sender_name)).setText(cursor.getString(cursor.getColumnIndex("SENDER_NAME"))); ((TextView) findViewById(R.id.description)).setText(cursor.getString(cursor.getColumnIndex("DESCRIPTION"))); } finally { if (database != null) { database.close(); } } } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 283
  • 284. 実 習 5.6.オプションメニューの作り方 • オプションメニューを作る方法を学ぶ • 実習を通じて以下の事を習得する – アプリケーションにオプションメニューを追加する方法 – 「オプションメニューをクリックした」ことを認識する方法 – 画面上にダイアログを表示する方法 オプションメニュー [MENU]ボタンを押す ことで表示されるメ ニュー This material is licensed under the Creative Commons License BY-NC-SA 4.0. 284
  • 285. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する • オプションメニューを追加するには – 仕組み • オプションメニューは、ボタンの設定をメニュー用のリソースファイ ルで作成する • アクティビティにオプションメニューを作成する為のメソッドがあり 、そのメソッド内でメニュー用リソースファイルの読み込みを行うこ とで、画面にメニューを表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 285
  • 286. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する • エミュレータ等の「menu」ボタンをクリックした時にオ プションメニューを表示する方法 – メニュー用リソースファイルを「res/menu/」ディレクトリの中に 作成する • <?xml version="1.0" encoding="utf-8"?> サンプルコード <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="@string/option_menu_add_label" android:id="@+id/main_menu_add"></item> </menu> – アクティビティのonCreateOptionMenuメソッドでメニュー用リソ ースファイルを読み込んでオプションメニューを表示する @Override • サンプルコード public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater menuInfalter = getMenuInflater(); menuInfalter.inflate(R.menu.main_menu, menu); return true; } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 286
  • 287. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する 実習 9 • 実習のテーマ – メニュー画面で、エミュレータの「menu」ボタンをクリックした 時にオプションメニューを表示する 実習で作成するオプ ションメニューは文字 のみを表示するシンプ ルなものとする This material is licensed under the Creative Commons License BY-NC-SA 4.0. 287
  • 288. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する 実習 9 • 実習の手順 1. 2. 3. メニュー用のリソースファイル(res/menu/main_menu.xml)を 新規作成する メニュー用のリソースファイルに「Item」を追加し、Id、Titleを 設定する RssReaderActivityでonCreateOptionMenuメソッドをオーバーライ ドし、メニュー用リソースファイルを読み込んでオプションメ ニューを表示する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 288
  • 289. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する 実習 9 – 設定情報 • 以下のリソースファイルを作成する 画面 リソースファイル - res/menu/main_menu.xml プロパティ • android:id="@+id/main_menu_add" • android:title="@string/option_menu_add_label“ • 以下のクラス、メソッドを実装する 画面 クラス メソッド メニュー画面 RssReaderActivity onCreateOptionMenu This material is licensed under the Creative Commons License BY-NC-SA 4.0. 概要 • オプションメニューを表示する 289
  • 290. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する 実習 9 • 確認方法 – メニュー画面を表示している時に、エミュレータの「menu」ボタ ンをクリックして、オプションメニューが表示されることを確認 する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 290
  • 291. 実 習 5.6.オプションメニューの作り方 オプションメニューを追加する 実習 9 • 実習の答え – res/menu/main_menu.xml <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:title="@string/option_menu_add_label" android:id="@+id/main_menu_add"></item> </menu> – RssReaderActivity public class RssReaderActivity extends Activity implements OnClickListener { ・・・・・・・・ @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuInflater menuInfalter = getMenuInflater(); menuInfalter.inflate(R.menu.main_menu, menu); return true; } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 291
  • 292. 5.6.オプションメニューの作り方 オプションメニューのクリックを認識 する • 「オプションメニューをクリックした」ことを認識する には – 仕組み • オプションメニューをクリックするとアクティビティでイベントが発 生し、アクティビティの特定のメソッドが呼び出される This material is licensed under the Creative Commons License BY-NC-SA 4.0. 292
  • 293. 5.6.オプションメニューの作り方 オプションメニューのクリックを認識 する • オプションメニューをクリックした時にダイアログを表 示する方法 1. 2. アクティビティのonOptionsItemSelectedメソッドでダイアログを 表示する ダイアログを表示するには、AlertDialog.Builderのオブジェクトを つくり、AlertDialog.Builder#showメソッドを呼び出す ※ ダイアログにタイトルを設定するには、AlertDialog.Builder#setTitleメ ソッドを使用する • サンプルコード @Override public boolean onOptionsItemSelected(MenuItem item) { new AlertDialog.Builder(this) .setTitle(R.string.ok_dialog_label) .show(); return true; } ・・・1 ・・・2 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 293
  • 294. 実 習 5.6.オプションメニューの作り方 オプションメニューのクリックを認識す る 実習 10 • 実習のテーマ – オプションメニューをクリックした時に、インターネットからRSS フィードを取得する処理を実行し、完了メッセージをダイアログ で表示する オプションメ ニューをクリッ ク This material is licensed under the Creative Commons License BY-NC-SA 4.0. 294
  • 295. 実 習 5.6.オプションメニューの作り方 オプションメニューのクリックを認識す る 実習 10 ※ RSSフィードをインターネットから取得してデータベースに登録 する処理について • 実習では、インターネットからRSSフィードを取得し、データベース にRSSフィードを登録するための一連の処理を、Javaクラスとしてス ケルトンプロジェクトに含めて提供する • 画面からは、 URLを引数としてRssFeedRegister#registrationメソッドを 実行することによって、一連の処理を実行できる 概要 スケルトンプロジェク トで提供しているクラ ス RssFeedRegister URLを引数にとり、インターネットからRSSフィードを取得してデータベースに 登録する一連の処理を実行するクラス HttpHelper URLを引数にとり、インターネットからRSSフィードを取得するクラス XmlHelper RSSフィードを引数にとり、XML形式のデータ構造をパースして、RSSフィード のデータをJavaオブジェクトに変換するクラス HttpHelperException インターネットからRSSフィードを取得する時に発生させるための例外クラス RssFeedEntity RSSフィードのデータをXML形式から変換して、データを詰めるクラス 表.This material is licensed under the Creative スケルトンプロジェクトで提供しているクラスの概要 Commons License BY-NC-SA 4.0. 295
  • 296. 実 習 5.6.オプションメニューの作り方 オプションメニューのクリックを認識す る 実習 10 • 実習の手順 – RssReaderActivityでonOptionsItemSelectedメソッドをオーバーライ ドし、RssFeedRegister#registrationメソッドを実行して、インター ネットからRSSフィードを取得してデータベースに登録する。処理 が完了したことを通知するため、AlertDialog.Builderを使用してダ イアログを表示する – 設定情報 • 以下のクラス、メソッドを実装する 画面 クラス メソッド メニュー画面 RssReaderActivity onOptionsItemSelected This material is licensed under the Creative Commons License BY-NC-SA 4.0. 概要 • ダイアログを表示する 296
  • 297. 実 習 5.6.オプションメニューの作り方 オプションメニューのクリックを認識す る 実習 10 • 確認方法 – メニュー画面でオプションメニューを表示してクリックした時に 、ダイアログが表示されることを確認する オプションメ ニューをクリッ ク This material is licensed under the Creative Commons License BY-NC-SA 4.0. 297
  • 298. 実 習 5.6.オプションメニューの作り方 オプションメニューのクリックを認識す る 実習 10 • 実習の答え – RssReaderActivity#onOptionsItemSelected public class RssReaderActivity extends Activity implements OnClickListener { ・・・・・・・・ @Override public boolean onOptionsItemSelected(MenuItem item) { RssFeedRegister rssFeedRegister = new RssFeedRegister(this); rssFeedRegister.registration("http://www.oesf.jp/modules/news/index.php?page=rss"); new AlertDialog.Builder(this) .setTitle(R.string.ok_dialog_label) .show(); return true; } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 298
  • 299. 6. トレーニングのまとめ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 299
  • 300. 6.1.トレーニングの振り返り • 1日目 概要 取り扱った 章 Androidプラットフォームの基礎を習得 1章 Androidアプリケーションのアーキテクチャを習得 • ライフサイクル • 主要コンポーネント • セキュリティ 2章 開発環境の構築方法を習得 3章 プロジェクトの作成からアプリケーション実行までの手順を習得 4章 開発ツールの機能、使用方法を習得 • Eclipse+ADT、エミュレータ(AVD)、DDMS 4章 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 300
  • 301. 6.1.トレーニングの振り返り • 2日目 概要 取り扱った 章 ユーザーインターフェースの作成 • 画面デザインの作成(単票画面、一覧画面) • 画面イベントの実装 • 画面遷移の実装 • ダイアログの実装 5章 インターネットの利用 • インターネットからRSSフィードを取得 5章 XMLの解析 5章 データベースの利用 • SQLiteOpenHelperを利用してのデータベース管理 • テーブルへのレコード追加、レコード削除 • トランザクションを使用 5章 単体テストの作成 • Androidのテストフレームワークを使用して単体テストを作成 This material is licensed under the Creative 6章 Commons License BY-NC-SA 4.0. 301
  • 302. 6.2.Androidに関する情報提供元 • インターネット – 技術資料・マニュアル • Android Developers – http://developer.android.com/intl/ja/index.html – コミュニティ • 日本Androidの会 – http://android.siprop.org/ • Android-SDK-Japan – http://groups.google.co.jp/group/android-sdk-japan This material is licensed under the Creative Commons License BY-NC-SA 4.0. 302
  • 303. 6.2.Androidに関する情報提供元 • インターネット – wiki • Google Androidに関する情報のまとめwiki – http://www29.atwiki.jp/android/ • Android Wiki – http://wikiwiki.jp/android/ – サンプル • android developersが公開しているサンプル – http://developer.android.com/intl/ja/guide/samples/index.html • apps-for-android – http://code.google.com/p/apps-for-android/ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 303
  • 304. 6.2.Androidに関する情報提供元 • 書籍 タイトル 著者 出版社 発行日 Google Android入門 嶋 技術評論社 2008/5/25 初めてのAndroid Ed Burnette (エド・バーネッ ト) オライリー 2009/5/15 Google Android アプリケーション開発入門 木南 英夫 日経BP社 2009/6/8 Google Android プログラミング入門 株式会社豆蔵 江川 崇 …他 アスキー・ メディアワークス 2009/7/2 Android2.1プログラミングバ イブ 布留川 英一 ソシム 2010/5/18 是一 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 304
  • 305. 6.3.Tipsの紹介 • 開発Tipsをシステム開発フェーズ毎に紹介 – 設計フェーズ • SQLiteで_idカラムを定義する – 実装フェーズ • サードパーティ製Javaライブラリの利用 – テストフェーズ • Androidアプリケーションの単体テスト This material is licensed under the Creative Commons License BY-NC-SA 4.0. 305
  • 306. 6.3.Tipsの紹介 SQLiteで_idカラムを定義する • SQLiteのPrimary Keyとなるカラムは”_id”という名 称で定義する – 理由 • Content Provider経由でデータベースを利用する際 に”_id”という列の値をユニークIDとする仕様の為 – http://developer.android.com/intl/ja/guide/topics/providers/c ontent-providers.html#basics • CursorAdapter、ArrayListCursor等のクラスで、”_id” という列から情報を取得する実装が存在する為 – “_id”はソースにハードコードされている This material is licensed under the Creative Commons License BY-NC-SA 4.0. 306
  • 307. 6.3.Tipsの紹介 SQLiteで_idカラムを定義する ■CursorAdapter.java protected void init(Context context, Cursor c, boolean autoRequery) { boolean cursorPresent = c != null; mAutoRequery = autoRequery; mCursor = c; ・・・・・・・ mRowIDColumn = cursorPresent ? c.getColumnIndexOrThrow("_id") : -1; mChangeObserver = new ChangeObserver(); ■ArrayListCursor.java public ArrayListCursor(String[] columnNames, ArrayList<ArrayList> rows) { ・・・・・・・ for (int i = 0; i < colCount; ++i) { if (columnNames[i].compareToIgnoreCase("_id") == 0) { mColumnNames = columnNames; ・・・・・・・ } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 307
  • 308. 6.3.Tipsの紹介 サードパーティ製Javaライブラリの利 用 • AndroidはJava SEを踏襲している為、サードパーテ ィ製Javaライブラリが利用できる – Android標準搭載のサードパーティ製ライブラリ • JUnit • Apache Commons • bluez.org • JSON.org This material is licensed under the Creative Commons License BY-NC-SA 4.0. 308
  • 309. 6.3.Tipsの紹介 サードパーティ製Javaライブラリの利 用 • そのまま利用できない場合がある 1. AndroidがサポートしていないのJava標準クラスを利 用している 2. メモリを大量に使用する 3. .propertiesファイルを使用している • リソースファイル、外部ファイルの使用について は、厳格な制限が設けられている為に利用できな い 特に2.、3.についてはビルドエラーは発生せず、実行時に例外が発生 する This material is licensed under the Creative Commons License BY-NC-SA 4.0. 309
  • 310. 6.3.Tipsの紹介 サードパーティ製Javaライブラリの利 用 • 対処方法 – ライブラリを修正する(ソースが入手可能な場合) • 対応例 – Androidがサポートしていないクラスを使用している個所 を、サポートしているクラスで対応するか、独自実装する – .propertiesを利用している場合は、内容をハードコードす る • 対処方法のリスク – 改変以降のメンテナンスについては自社対応が必要 – 改変したライブラリのライセンス形態により、ソース 公開義務が発生する可能性がある This material is licensed under the Creative Commons License BY-NC-SA 4.0. 310
  • 311. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • Androidアプリケーションの単体テストは、 Androidのテストフレームワークを使用して作成す る – Androidのテストフレームワークとは? • JUnit3ベースのフレームワーク • 単体テストの実施手順はJUnitと同様 1. TestCaseを作成する 2. TestSuiteを作成する(TestCaseを登録) 3. TestRunnerでTestCase、またはTestSuiteを実行する ※Eclipseで実行が可能 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 311
  • 312. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • 対象クラス毎にTestCaseクラスを継承して単体テ ストを作成する 対象クラス AndroidのTestCaseクラス 備考 POJO AndroidTestCase Activity ActivityInstrumentationTestCase2 キー入力イベント等の画面 操作に伴うイベントのテス ト ex.ボタン押下 ActivityUnitTestCase Service Activityイベントのテスト ServiceTestCase Content Provider ProviderTestCase2 ■詳細については下記を参照 http://developer.android.com/intl/ja/reference/android/test/package-summary.html This material is licensed under the Creative Commons License BY-NC-SA 4.0. 312
  • 313. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • POJOのテストクラス作成例 package jp.oesf.mtgeduwg.training.test; import jp.oesf.mtgeduwg.training.rssreader.SamplePojo; import android.test.AndroidTestCase; public class SamplePojoTest extends AndroidTestCase { public void testGetMessage() throws Exception { SamplePojo samplePojo = new SamplePojo(); assertEquals(samplePojo.getMessage(), "Message from SamplePojo"); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 313
  • 314. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • Activityのテストクラス作成例(キー入力) package jp.oesf.mtgeduwg.training.test; public class AddActivityTest extends ActivityInstrumentationTestCase2<AddActivity> { public AddActivityTest() { super("jp.oesf.mtgeduwg.training.rssreader", AddActivity.class); } public void testUrlFieldKeyInput() { // キーの送信("H","T","T","P"と入力) sendKeys(KeyEvent.KEYCODE_H, KeyEvent.KEYCODE_T, KeyEvent.KEYCODE_T, KeyEvent.KEYCODE_P); assertEquals(urlField.getText().toString(), "http"); } } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 314
  • 315. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • Activityのテストクラス作成例(ボタン押下) package jp.oesf.mtgeduwg.training.test; public class AddActivityTest extends ActivityInstrumentationTestCase2<AddActivity> { public AddActivityTest() { super("jp.oesf.mtgeduwg.training.rssreader", AddActivity.class); } public void testAddButtonClick() { getActivity().runOnUiThread(new Runnable() { public void run() { urlField.setText("http://www.oesf.jp/modules/news/index.php?page=rss"); addButton.performClick(); }}); ボタンのクリックを実 行 getInstrumentation().waitForIdleSync(); assertTrue(existsUrlAddressById(10)); This material is licensed under the Creative Commons License BY-NC-SA 4.0. 315
  • 316. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • Activityのテストクラス作成例(onResume発生) package jp.oesf.mtgeduwg.training.test; public class AddActivityUnitTest extends ActivityUnitTestCase<AddActivity> { public AddActivityUnitTest() { super(AddActivity.class); } @Override protected void setUp() throws Exception { super.setUp(); } public void testSendResumeEvent() throws Exception { ActivityにonResume Intent intent = new Intent(Intent.ACTION_MAIN); イベントを発行 startActivity(intent, null, null); getInstrumentation().callActivityOnResume(getActivity()); } This material is licensed under the Creative Commons License BY-NC-SA 4.0. 316
  • 317. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • TestSuiteの作成 – AndroidではTestSuiteの生成クラスとして、 TestSuiteBuilderが用意されている package jp.oesf.mtgeduwg.training.test; public class AllTests extends TestCase { public static Test suite() throws Exception { TestSuiteBuilder testSuiteBuilder = new TestSuiteBuilder(AllTests.class); return testSuiteBuilder.includePackages ("jp.oesf.mtgeduwg.training.rssreader") .build(); } 指定のパッケージ以下の全テストケー } スを実行する ※JUnitのTestSuiteの作成方法も利用可能 This material is licensed under the Creative Commons License BY-NC-SA 4.0. 317
  • 318. 6.3.Tipsの紹介 Androidアプリケーションの単体テスト • テストを実行するにはAndroidManifest.xmlに設定 が必要 1. テストの実行に必要なライブラリの設定を追加する 2. TestRunnerの設定を追加する <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android=http://schemas.android.com/apk/res/android> <application android:icon="@drawable/icon“> <uses-library android:name=“android.test.runner” /> ・・・ ① </application> <instrumentation android:name="android.test.InstrumentationTestRunner" android:label="Tests for RssReader" android:targetPackage=“jp.oesf.mtgeduwg.training.rssreader”/> ・・・ ② </manifest> This material is licensed under the Creative Commons License BY-NC-SA 4.0. 318
  • 319. 本ドキュメントはウルシステムズ株式会社が作成しています。 http://www.ulsystems.co.jp 本ドキュメントは株式会社リーディング・エッジ社が Android2.1対応、オフライン環境対応のために改変しています。 http://www.leadinge.co.jp/ This material is licensed under the Creative Commons License BY-NC-SA 4.0. 319