Upload
-ntt
View
478
Download
0
Embed Size (px)
Citation preview
Androidアプリケーション開発中級研修改訂版
後編
Copyright © 2016, NTT Software Corporation.
2
本スライドは、NTTソフトウェア社内技術者育成研修(ソフト道場研修)テキストです。※実際の研修では演習を実施しますが、本テキストには演習に関する内容は含まれていません。
【著作権・免責事項】• 本セミナーコースの内容、本資料のすべての著作権は、NTTソフトウェア株式会社に帰属します。• 無断での本資料の複写、複製、再利用、転載、転用を禁じます。• 本資料と演習等で利用するすべての教材は、NTTソフトウェア株式会社からの保証なしに提供されます。• 本書に記載されている会社名および製品名は、一般に各社の商標または登録商標です。
Copyright © 2016, NTT Software Corporation.
3
ロケーション
Copyright © 2016, NTT Software Corporation.
4
■端末の位置情報取得が可能
方式1:GPSによる位置情報取得
方式2:ネットワーク(WiFi/3G)による情報取得
【ロケーション】概要
緯度・経度を取得可能
方式2に影響
設定アプリ内の「位置情報」メニュー
位置情報取得方式=プロバイダ
方式1に影響
方式1 + 方式2
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)
■位置情報取得等のイベントでコールバック発生
Copyright © 2016, NTT Software Corporation.
6
演習(12)~ロケーションの利用~
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のみを指定で良い。
Copyright © 2016, NTT Software Corporation.
8
GPSやネットワーク情報を用いた位置情報取得可能(複数方式があるので、シーン毎での使い分け)
LocationManager.GPS_PROVIDER
LocationManager.NETWORK_PROVIDER
位置情報取得には、パーミッション設定が必須
位置情報取得のバッテリー消費は大きいので、適切な取得間隔/アプリ終了後の取得停止等の工夫が必要
バッテリー消費や取得間隔を設定可能な高機能APIとして、「GooglePlayServices」を利用することが推奨されている
【ロケーション】まとめ
Copyright © 2016, NTT Software Corporation.
9
タブレット向け開発
Copyright © 2016, NTT Software Corporation.
バージョン別に対象デバイスが異なる
主にスマホ向け
す
【タブレット】OSバージョン毎の位置付け
2.x4.x以降
3.x
タブレット向け
スマホ・タブレットの共存
Copyright © 2016, NTT Software Corporation.
各端末の特徴の違いを理解することが必要
スマホ タブレット
画面サイズ小(~5inch) ハンドセット向けUI Android 2.x / 4.x
画面サイズ大(7~10inch) タブレット向けUI Android 3.x / 4.x(※)
※初代Galaxy Tab(2.2)はタブレットに分類されるが、本研修では、例外として除外する。
【タブレット】端末の多様化
Copyright © 2016, NTT Software Corporation.
画面の大きさ/表示可能な情報量
複数Pane表示
基本的に1Pane
【タブレット】おさえるべき特徴①
スマホ タブレット
Copyright © 2016, NTT Software Corporation.
メニューの振る舞い
常時表示されているメニュー
【タブレット】おさえるべき特徴②
Copyright © 2016, NTT Software Corporation.
【タブレット】スマホ・タブレットアプリの典型的な違い
スマホ タブレット
Copyright © 2016, NTT Software Corporation.
2pane化して無駄なく表示
①2pane化してスペースの有効活用
②メニューの常時表示
【タブレット】タブレット向けアプリ開発のポイント
特に重要な2点
Copyright © 2016, NTT Software Corporation.
【タブレット】タブレット向けアプリ開発のポイント
①複数Paneをどうやって実現するか?
・キーワード:
②常時表示されるメニューはどうやって作る?
・キーワード:
Fragment(フラグメント)
Action Bar(アクションバー)
Copyright © 2016, NTT Software Corporation.
マルチPaneの構成にかかせないもの
【Fragment】概要
Activityという箱の中に、Fragmentという複数の小箱を入れるイメージ
※Fragment=Android3.0から追加されたクラス
Fragment A Fragment B
Activity
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(右側)
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を返却する
Copyright © 2016, NTT Software Corporation.
『Fragment』=Activityを分割するための機構
1Activityを複数Fragmentに分けて開発可能(今回は、2pane⇒2Fragmentで実現)
FragmentはActivityにひもづいて動作
FragmentにもActivity同様ライフサイクルあり
FragmentもActivity同様にStackを保持可能(Activityにひもづくバックスタック領域で管理)
スマホとタブレット向けのソースコードを共通化するときにも有効
【Fragment】まとめ
Copyright © 2016, NTT Software Corporation.
右上に常時表示されるメニュー
【ActionBar】概要
Action Bar(3.0以降)
Copyright © 2016, NTT Software Corporation.
Action Barのエリア
【ActionBar】構成①
ベースメニュー(常時表示される)
オーバーフローメニュー(タップにより表示される)
Copyright © 2016, NTT Software Corporation.
Action Bar1つの構成
アイコン テキスト
【ActionBar】構成②
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フォルダに格納する
Copyright © 2016, NTT Software Corporation.
25
演習(13)~タブレット向けアプリの開発~
Copyright © 2016, NTT Software Corporation.
26
Android最新機能※本ファイルからは削除しております。ご了承ください。
<省略スライドに含まれる内容例>・Lollipop: マテリアルデザイン、Smart Lockなど・Marshimallow: 新パーミッションモデル、指紋認証など・N:マルチウィンドウ、VRモードなど
Copyright © 2016, NTT Software Corporation.
27
Google Maps
Copyright © 2016, NTT Software Corporation.
28
■GoogleMaps連携を比較的容易に実現可能 MapFragmentという専用フラグメントを画面に配置するイメージ
拡大縮小/スクロールに関する面倒な実装は不要
【GoogleMaps】概要(1/2)
拡大縮小可能
タッチ操作でスクロール可能
Copyright © 2016, NTT Software Corporation.
29
■GoogleMaps上にマーカーを描画 地点(緯度経度)で描画位置を指定
マーカーの色や描画アイコンの変更が可能
吹き出しに表示するテキストも指定可能
【GoogleMaps】概要(2/2)
デフォルトのマーカーと吹き出しの例 独自アイコンと吹き出しの例
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への各種設定
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配布を行う場合、リリース証明書を用いてフィンガープリントを生成すること。
Copyright © 2016, NTT Software Corporation.
32
【GoogleMaps】API Key発行手順(2/5)
Copyright © 2016, NTT Software Corporation.
33
【GoogleMaps】API Key発行手順(3/5)
Copyright © 2016, NTT Software Corporation.
34
【GoogleMaps】API Key発行手順(4/5)
Copyright © 2016, NTT Software Corporation.
35
【GoogleMaps】API Key発行手順(5/5)
Copyright © 2016, NTT Software Corporation.
36
【GoogleMaps】ライブラリ利用設定
ビルドにはGoogle Play Serviceライブラリが必要 SDKマネージャーからダウンロード
[Extras]→[Google Play services]
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キー
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キーに置き換える
Copyright © 2016, NTT Software Corporation.
演習(14)~地図アプリの実装例~
※Maps APIは、Androidのオプション扱いのため、実行するには、Google APIを含むAVDの作成が必要
Copyright © 2016, NTT Software Corporation.
GoogleMaps連携により、比較的容易に地図連携可能以下の機能について、面倒な実装不要
拡大縮小
スクロール
GoogleMaps連携にはいくつかの準備が必要
動作確認用の実機の用意
現状エミュレータでの動作確認はできていない
APIキーの取得(デバッグ版/リリース版)
Google Play Serviceライブラリ利用準備
AndroidManifest.xmlへの設定追加
【GoogleMaps】まとめ
Copyright © 2016, NTT Software Corporation.
総合演習
Copyright © 2016, NTT Software Corporation.
•Google Play方式•Webサーバ方式
Androidアプリ配信
Copyright © 2016, NTT Software Corporation.
Androidアプリ配布方式
(1)Google Play※で公開(3rd-Partyマーケット含む)
アカウント作成後、マーケットにアプリをアップロード
アプリが誰にでも見える状態となる点に注意
課金の仕組みがあり、有料アプリが公開可能
(2)自前Webサーバで公開
Webサーバを構築し、その中でアプリ配布
アプリ配布対象を制限するには、Webサーバ側で適切な対処を実施
端末側で設定変更の必要あり
開発したアプリを配布するには、2つの方式がある
※Google Playは、以前、Android Marketという名前で運用されていた。
Copyright © 2016, NTT Software Corporation.
Androidアプリ配信の流れ
ソースファイル(Java)
Google Playサーバ
クラスファイル(class)
Dalvik実行ファイル(dex)
Android SDK
コンパイル バイナリ変換
画像 音声 XMLリソース
パッケージング
リソース
製造元証明書
署名済みパッケージ(apk)
署名
Android端末
署名済みパッケージ
①Google Play方式 ②Webサーバ方式
アップロード アップロード
ダウンロード 任意サーバ
アプリ説明&配布用HTML
アプリ説明&配布用ページ
アプリ説明 署名済みパッケージ
アプリケーションパッケージ(apk)
Copyright © 2016, NTT Software Corporation.
45
①Google Play方式(サービス概要)
全世界のアプリを利用可能
アプリ名による検索
ユーザ評価(5段階)レビュー閲覧/投稿が可能
開発者がAndroid向けアプリを登録/公開できるGoogle運営のサービス
アプリ説明画像
Copyright © 2016, NTT Software Corporation.
①Google Play方式(公式Web版)
Google PlayはWeb版も存在する
PCからアプリを選択して端末にインストール可能
アプリ名による検索
Webでインストール指示すると端末に自動インストール
Copyright © 2016, NTT Software Corporation.
①Google Play方式(アプリ登録条件)
Google Playにアプリを登録するには事前に開発者アカウントの取得が必要
(1)開発者アカウントの登録費用(初期費用$25)→必要なのは、初期費用のみ(年間費用は発生しない)。→アプリを何本登録する場合でも、$25のみ
(2)Googleアカウント→ (3)の手続きを行うために必要
(3)Googleチェックアウトに対応した決済手段(クレジットカード)→初期費用の支払いに必要
無料アプリを登録するために必要なもの
Copyright © 2016, NTT Software Corporation.
①Google Play方式(アプリ登録フロー)
アプリに署名後、Webブラウザ経由でGoogle Playにアクセスし、アップロード
Google Playサーバ
製造元証明書
署名済みパッケージ(apk)
署名
Android端末
署名済みパッケージ
アップロード
ダウンロード
アプリ説明
アプリケーションパッケージ(apk)
アップロード後、 Google Playのダウンロード画面に数時間後に反映
Google Playからの配布には、署名必須証明書は、自己署名でOK(CA証明書は不要)
Copyright © 2016, NTT Software Corporation.
②Webサーバ方式(アプリ登録フロー)
アプリに署名後、インターネット上の
任意Webサーバにアップロード
製造元証明書
署名済みパッケージ(apk)
署名
Android端末
アップロード
ダウンロード
任意サーバ
アプリ説明&配布用HTML
アプリ説明&配布用ページ
署名済みパッケージ
アプリケーションパッケージ(apk)
Google Play方式と同じ
■○○アプリダウンロード
→hoge.apk
ダウンロードサイト
apkファイルへのリンク
Copyright © 2016, NTT Software Corporation.
50
②Webサーバ方式(注意点)
アプリをダウンロードさせるには、
端末の設定変更が必要
•設定を変更しない場合は、アプリのダウンロードが不可
•設定を変更しない状態で、アプリをダウンロードしようとした場合、「設定変更が必要」の警告ダイアログ表示
Copyright © 2016, NTT Software Corporation.
おわり
お疲れ様でした。
https://www.ntts.co.jp/products/soft_dojyo/index.html