52
Androidアプリケーション開発 中級研修改訂版 後編

Androidアプリケーション開発中級研修 後編

  • Upload
    -ntt

  • View
    478

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Androidアプリケーション開発中級研修 後編

Androidアプリケーション開発中級研修改訂版

後編

Page 2: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

2

本スライドは、NTTソフトウェア社内技術者育成研修(ソフト道場研修)テキストです。※実際の研修では演習を実施しますが、本テキストには演習に関する内容は含まれていません。

【著作権・免責事項】• 本セミナーコースの内容、本資料のすべての著作権は、NTTソフトウェア株式会社に帰属します。• 無断での本資料の複写、複製、再利用、転載、転用を禁じます。• 本資料と演習等で利用するすべての教材は、NTTソフトウェア株式会社からの保証なしに提供されます。• 本書に記載されている会社名および製品名は、一般に各社の商標または登録商標です。

Page 3: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

3

ロケーション

Page 4: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

4

■端末の位置情報取得が可能

方式1:GPSによる位置情報取得

方式2:ネットワーク(WiFi/3G)による情報取得

【ロケーション】概要

緯度・経度を取得可能

方式2に影響

設定アプリ内の「位置情報」メニュー

位置情報取得方式=プロバイダ

方式1に影響

方式1 + 方式2

Page 5: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

5

【ロケーション】位置情報取得の流れ

概要 実装

1 ロケーションマネージャの取得 LocationManager manager = (LocationManager)

getSystemService(Context.LOCATION_SERVICE);

2 位置情報取得リスナの登録 manager.requestLocationUpdates(LocationManager.GP

S_PROVIDER, 0, 0, this);

3 位置情報取得リスナの解除 manager.removeUpdates(this);

■リスナ登録により、位置情報の定期更新開始■リスナ解除により、同定期更新停止

コールバック契機 実装

a 位置情報を取得した時 public void onLocationChanged(Location location)

b 位置情報の状態が更新された時 public void onStatusChanged(String provider, int status,

Bundle extras)

c プロバイダが有効になった時 public void onProviderEnabled(String provider)

d プロバイダが無効になった時 public void onProviderDisabled(String provider)

■位置情報取得等のイベントでコールバック発生

Page 6: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

6

演習(12)~ロケーションの利用~

Page 7: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

7

■位置情報取得のプロバイダ比較

【ロケーション】位置情報取得の方式比較

方式1:GPS(LocationManager.GPS_PROVIDER)

方式2:ネットワーク(WiFi/3G)(LocationManager.

NETWORK_PROVIDER)

特徴 GPSを用いて位置情報を特定する。 通信ネットワークの情報を用いて位置情報を特定する。

長所 正確な位置情報を取得できる。 短時間で位置情報を取得できる。

短所 位置情報取得に時間がかかる。

建物の中では取得できない場合がある。

取得できる位置情報の誤差が大きい。

注意点 以下のpermissionを追加する必要がある。

android.permission.android.permission.ACCESS_FINE_LOCATION

以下のpermissionを追加する必要がある。

android.permission.android.permission. ACCESS_COARSE_LOCATION

※より詳細な情報は、Google公式Webサイトを参照のこと。http://developer.android.com/guide/topics/location/strategies.html

※ただし、プロバイダとして、方式1、2の両方を用いる場合は、ACCESS_FINE_LOCATIONのみを指定で良い。

Page 8: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

8

GPSやネットワーク情報を用いた位置情報取得可能(複数方式があるので、シーン毎での使い分け)

LocationManager.GPS_PROVIDER

LocationManager.NETWORK_PROVIDER

位置情報取得には、パーミッション設定が必須

位置情報取得のバッテリー消費は大きいので、適切な取得間隔/アプリ終了後の取得停止等の工夫が必要

バッテリー消費や取得間隔を設定可能な高機能APIとして、「GooglePlayServices」を利用することが推奨されている

【ロケーション】まとめ

Page 9: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

9

タブレット向け開発

Page 10: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

バージョン別に対象デバイスが異なる

主にスマホ向け

【タブレット】OSバージョン毎の位置付け

2.x4.x以降

3.x

タブレット向け

スマホ・タブレットの共存

Page 11: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

各端末の特徴の違いを理解することが必要

スマホ タブレット

画面サイズ小(~5inch) ハンドセット向けUI Android 2.x / 4.x

画面サイズ大(7~10inch) タブレット向けUI Android 3.x / 4.x(※)

※初代Galaxy Tab(2.2)はタブレットに分類されるが、本研修では、例外として除外する。

【タブレット】端末の多様化

Page 12: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

画面の大きさ/表示可能な情報量

複数Pane表示

基本的に1Pane

【タブレット】おさえるべき特徴①

スマホ タブレット

Page 13: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

メニューの振る舞い

常時表示されているメニュー

【タブレット】おさえるべき特徴②

Page 14: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

【タブレット】スマホ・タブレットアプリの典型的な違い

スマホ タブレット

Page 15: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

2pane化して無駄なく表示

①2pane化してスペースの有効活用

②メニューの常時表示

【タブレット】タブレット向けアプリ開発のポイント

特に重要な2点

Page 16: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

【タブレット】タブレット向けアプリ開発のポイント

①複数Paneをどうやって実現するか?

・キーワード:

②常時表示されるメニューはどうやって作る?

・キーワード:

Fragment(フラグメント)

Action Bar(アクションバー)

Page 17: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

マルチPaneの構成にかかせないもの

【Fragment】概要

Activityという箱の中に、Fragmentという複数の小箱を入れるイメージ

※Fragment=Android3.0から追加されたクラス

Fragment A Fragment B

Activity

Page 18: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

具体的には、どんなXML?

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:orientation="horizontal" android:layout_width="match_parent"android:layout_height="match_parent">

<fragment android:name="jp.co.ntts.android.sample.MainFragment"android:id="@+id/wordListFragment" android:layout_weight="1"android:layout_width="0dp" android:layout_height="match_parent" />

<fragment android:name="jp.co.ntts.android.sample.DetailFragment"android:id="@+id/wordFragment" android:layout_weight="2"android:layout_width="0dp" android:layout_height="match_parent" />

</LinearLayout>

Fragment A(左側)

【Fragment】レイアウト定義例

Fragment B(右側)

Page 19: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

具体的に、FragmentはどんなJavaソース?

/*** 詳細情報を表示するフラグメントです。*/

public class DetailFragment extends Fragment {

@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {// LayoutInflater.inflate(int, ViewGroup, boolean)// を使って、レイアウトXMLで定義したビューを実体化してreturnする。// レイアウトXMLファイル名は「detail.xml」return inflater.inflate(R.layout.detail, container, false);

}

}

【Fragment】Javaソース例

Fragmentクラスを継承する

FragmentへUIをひもづける

UIを持つFragmentの場合→onCreateVierwの戻り値で、Fragmentに割り当てるViewを返却する

Page 20: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

『Fragment』=Activityを分割するための機構

1Activityを複数Fragmentに分けて開発可能(今回は、2pane⇒2Fragmentで実現)

FragmentはActivityにひもづいて動作

FragmentにもActivity同様ライフサイクルあり

FragmentもActivity同様にStackを保持可能(Activityにひもづくバックスタック領域で管理)

スマホとタブレット向けのソースコードを共通化するときにも有効

【Fragment】まとめ

Page 21: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

右上に常時表示されるメニュー

【ActionBar】概要

Action Bar(3.0以降)

Page 22: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

Action Barのエリア

【ActionBar】構成①

ベースメニュー(常時表示される)

オーバーフローメニュー(タップにより表示される)

Page 23: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

Action Bar1つの構成

アイコン テキスト

【ActionBar】構成②

Page 24: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

XMLファイルで定義可能

<menu xmlns:android="http://schemas.android.com/apk/res/android"><item android:id=“@+id/item_add” android:title=“@string/add”

android:icon="@drawable/icon_menu_add" android:showAsAction="ifRoom|withText" />

<item android:id=“@+id/item_delete” android:title="@string/delete" android:icon="@drawable/icon_menu_delete”android:showAsAction="ifRoom|withText" />

<item android:id=“@+id/item_mail” android:title="@string/mail" android:icon="@drawable/icon_menu_mail“

android:showAsAction="never" /></menu>

■android:showAsAction=“表示パラメータ”・ifRoom:スペースがあれば、Action Barにアイコンを表示・withText:テキストを表示・always :必ずAction Barに表示(使わない方が良い)・never :必ずオーバーフローメニューとして表示

追加

削除

メール送信

メニュー定義XML

【ActionBar】メニュー定義例

res¥menuフォルダに格納する

Page 25: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

25

演習(13)~タブレット向けアプリの開発~

Page 26: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

26

Android最新機能※本ファイルからは削除しております。ご了承ください。

<省略スライドに含まれる内容例>・Lollipop: マテリアルデザイン、Smart Lockなど・Marshimallow: 新パーミッションモデル、指紋認証など・N:マルチウィンドウ、VRモードなど

Page 27: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

27

Google Maps

Page 28: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

28

■GoogleMaps連携を比較的容易に実現可能 MapFragmentという専用フラグメントを画面に配置するイメージ

拡大縮小/スクロールに関する面倒な実装は不要

【GoogleMaps】概要(1/2)

拡大縮小可能

タッチ操作でスクロール可能

Page 29: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

29

■GoogleMaps上にマーカーを描画 地点(緯度経度)で描画位置を指定

マーカーの色や描画アイコンの変更が可能

吹き出しに表示するテキストも指定可能

【GoogleMaps】概要(2/2)

デフォルトのマーカーと吹き出しの例 独自アイコンと吹き出しの例

Page 30: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

30

【GoogleMaps】地図表示に必要な作業(概要)

■地図表示には、実装以外に3つの設定が必要。

• パーミッション• Google Play Servicesバージョン番号• API Key

keytoolコマンド(by JavaSE)

デバッグ証明書

フィンガープリント

API Key発行サイト

AndroidManifest

API Key

①API Keyの取得

②Google Play Serviceライブラリの利用設定③AndroidManifest.xmlへの各種設定

Page 31: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

31

概要 詳細

1 証明書のフィンガープリント取得(※)

• デバッグ証明書のありか(Windows 7の場合)C:¥Users¥%USERNAME%¥.android¥debug.keystore

• 証明書のフィンガープリントの表示> keytool -list -keystore debug.keystore

• 「SHA1」の値をメモしておく。(例) SHA1: BB:0D:AC:74:D3:21:E1:43:07:71:9B:62:90:AF:A1:66:6E:XX:YY:ZZ

2 API Keyの発行 • WebブラウザでGoogle Developers Consoleにアクセスする。

https://console.developers.google.com/

• [プロジェクトを作成]ボタンを押し、規約に同意し、プロジェクトを作成する。

• 当該プロジェクト詳細の[APIと認証]>[API]から[Google Maps Android API]のリンクを辿り、表示されるダイアログで[APIを有効にする]ボタンを押す。

• [APIと認証]>[認証情報]から[認証情報を追加]>[APIキー]>[Android key]の順にボタンを押す。

• 「SHA1フィンガープリント」と、「アプリのパッケージ名」を入力し、[作成]ボタンを押すとAPI Keyが表示される。

■地図表示には、API Keyの発行手続きが必要

【GoogleMaps】API Key発行手順(1/5)

※Google Play配布を行う場合、リリース証明書を用いてフィンガープリントを生成すること。

Page 32: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

32

【GoogleMaps】API Key発行手順(2/5)

Page 33: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

33

【GoogleMaps】API Key発行手順(3/5)

Page 34: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

34

【GoogleMaps】API Key発行手順(4/5)

Page 35: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

35

【GoogleMaps】API Key発行手順(5/5)

Page 36: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

36

【GoogleMaps】ライブラリ利用設定

ビルドにはGoogle Play Serviceライブラリが必要 SDKマネージャーからダウンロード

[Extras]→[Google Play services]

Page 37: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

37

【GoogleMaps】Android Studioを使った雛形作成

プロジェクト新規作成時のActivity選択画面で[Google Maps Activity]を選択するだけで、ほとんどの設定は完了する。

① 【自動設定済】 (app/build.gradle)Google Play servicesライブラリを依存ライブラリに追加

② 【自動設定済】 (app/src/main/AndroidManifest.xml)パーミッション宣言

③ 【自動設定済】 (app/src/main/AndroidManifest.xml)Google Play servicesバージョン番号の宣言

④ 【手動設定が必要】 (app/src/debug/res/values/google_maps_api.xml)デバッグ証明書向けのAPIキー

⑤ 【手動設定が必要】 (app/src/release/res/values/google_maps_api.xml)リリース証明書向けのAPIキー

Page 38: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

【GoogleMaps】APIキーの設定

取得したAPIキーを、以下のファイルに書く

デバッグ証明書向けapp/src/debug/res/values/google_maps_api.xml

リリース証明書向けapp/src/release/res/values/google_maps_api.xml

<resources><!--TODO: Before you run your application, you need a Google Maps API key.....

Once you have your key (it starts with "AIza"), replace the "google_maps_key"string in this file.--><string name="google_maps_key" translatable="false" templateMergeStrategy="preserve">

YOUR_KEY_HERE

</string>

</resources>

この部分を実際のAPIキーに置き換える

Page 39: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

演習(14)~地図アプリの実装例~

※Maps APIは、Androidのオプション扱いのため、実行するには、Google APIを含むAVDの作成が必要

Page 40: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

GoogleMaps連携により、比較的容易に地図連携可能以下の機能について、面倒な実装不要

拡大縮小

スクロール

GoogleMaps連携にはいくつかの準備が必要

動作確認用の実機の用意

現状エミュレータでの動作確認はできていない

APIキーの取得(デバッグ版/リリース版)

Google Play Serviceライブラリ利用準備

AndroidManifest.xmlへの設定追加

【GoogleMaps】まとめ

Page 41: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

総合演習

Page 42: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

•Google Play方式•Webサーバ方式

Androidアプリ配信

Page 43: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

Androidアプリ配布方式

(1)Google Play※で公開(3rd-Partyマーケット含む)

アカウント作成後、マーケットにアプリをアップロード

アプリが誰にでも見える状態となる点に注意

課金の仕組みがあり、有料アプリが公開可能

(2)自前Webサーバで公開

Webサーバを構築し、その中でアプリ配布

アプリ配布対象を制限するには、Webサーバ側で適切な対処を実施

端末側で設定変更の必要あり

開発したアプリを配布するには、2つの方式がある

※Google Playは、以前、Android Marketという名前で運用されていた。

Page 44: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

Androidアプリ配信の流れ

ソースファイル(Java)

Google Playサーバ

クラスファイル(class)

Dalvik実行ファイル(dex)

Android SDK

コンパイル バイナリ変換

画像 音声 XMLリソース

パッケージング

リソース

製造元証明書

署名済みパッケージ(apk)

署名

Android端末

署名済みパッケージ

①Google Play方式 ②Webサーバ方式

アップロード アップロード

ダウンロード 任意サーバ

アプリ説明&配布用HTML

アプリ説明&配布用ページ

アプリ説明 署名済みパッケージ

アプリケーションパッケージ(apk)

Page 45: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

45

①Google Play方式(サービス概要)

全世界のアプリを利用可能

アプリ名による検索

ユーザ評価(5段階)レビュー閲覧/投稿が可能

開発者がAndroid向けアプリを登録/公開できるGoogle運営のサービス

アプリ説明画像

Page 46: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

①Google Play方式(公式Web版)

Google PlayはWeb版も存在する

PCからアプリを選択して端末にインストール可能

アプリ名による検索

Webでインストール指示すると端末に自動インストール

Page 47: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

①Google Play方式(アプリ登録条件)

Google Playにアプリを登録するには事前に開発者アカウントの取得が必要

(1)開発者アカウントの登録費用(初期費用$25)→必要なのは、初期費用のみ(年間費用は発生しない)。→アプリを何本登録する場合でも、$25のみ

(2)Googleアカウント→ (3)の手続きを行うために必要

(3)Googleチェックアウトに対応した決済手段(クレジットカード)→初期費用の支払いに必要

無料アプリを登録するために必要なもの

Page 48: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

①Google Play方式(アプリ登録フロー)

アプリに署名後、Webブラウザ経由でGoogle Playにアクセスし、アップロード

Google Playサーバ

製造元証明書

署名済みパッケージ(apk)

署名

Android端末

署名済みパッケージ

アップロード

ダウンロード

アプリ説明

アプリケーションパッケージ(apk)

アップロード後、 Google Playのダウンロード画面に数時間後に反映

Google Playからの配布には、署名必須証明書は、自己署名でOK(CA証明書は不要)

Page 49: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

②Webサーバ方式(アプリ登録フロー)

アプリに署名後、インターネット上の

任意Webサーバにアップロード

製造元証明書

署名済みパッケージ(apk)

署名

Android端末

アップロード

ダウンロード

任意サーバ

アプリ説明&配布用HTML

アプリ説明&配布用ページ

署名済みパッケージ

アプリケーションパッケージ(apk)

Google Play方式と同じ

■○○アプリダウンロード

→hoge.apk

ダウンロードサイト

apkファイルへのリンク

Page 50: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

50

②Webサーバ方式(注意点)

アプリをダウンロードさせるには、

端末の設定変更が必要

•設定を変更しない場合は、アプリのダウンロードが不可

•設定を変更しない状態で、アプリをダウンロードしようとした場合、「設定変更が必要」の警告ダイアログ表示

Page 51: Androidアプリケーション開発中級研修 後編

Copyright © 2016, NTT Software Corporation.

おわり

お疲れ様でした。

Page 52: Androidアプリケーション開発中級研修 後編

https://www.ntts.co.jp/products/soft_dojyo/index.html