解説ページへのリンクを張ってあります。
画像を並べて表示のバリエーション (短冊マト
目次
#Chapter01 イントロダクション
xART(Android Runtime)とDalvik (P.5)
xAndroidスマートフォンのシェア (P.6)
xAndroidのバージョン (P.6)
table:8月
日 曜日 日数 進捗状況 備考
3日 火 1日目 AM(P.001~P.031)PM(P.032~P.060) -
4日 水 2日目 AM(P.061~P.071)PM(P.072~P.080) -
5日 木 - - 【訓練休】
2021年9月1日(水) 19日目
Chapter09_4プロジェクト
アクティビティ
レイアウトファイル
Chapter09_3プロジェクト
#Chapter02 テキスト P.59
Activity は、電話をかける、写真を撮影する、メールを送る、マップを閲覧するといった操作をユーザーができる画面を提供するアプリケーションコンポーネントです。
(簡単に言うと)
アクティビティとは、ユーザーが実際に目にするアプリケーション画面のことです。
【参照】Android Developers、TechAcademyマガジン
#Chapter01 テキスト P.5
Android Runtime
Android Runtime(ART、アンドロイド ランタイム)は、ランタイム環境で動作するAndroidオペレーティングシステムを指す。Android 5.0以降で、従来のDalvikからARTに置き換えられ、正式サポートされている。
従来のDalvikは、アプリを起動する度に中間コードをネイティブコードにコンパイルする処理が加わるため動作速度に悪影響を及ぼすが、ARTの場合は予めネイティブコードにコンパイルしておくため、動作速度の向上と省電力化に繋がっている。
#その他
総称型 (Generic /ジェネリック type)とは
総称型(Generic /ジェネリック type)とは、端的に言えば「<>」のを使った機能のことです。
「<>」を使用してクラス、インターフェース、メソッドなどにString型やInteger型などの型を定義することを可能にしているものです。
型パラメータとは
#その他
Android 9.0では暗号化されていない接続はデフォルトで無効になります。
暗号化されていない接続を「クリアテキスト接続」と呼ぶようです。
全ての通信をTransport Layer Security (TLS) に対応するのがベストプラクティス。
一般的なアプリだとHTTPを使わずHTTPSにすればOK。
#その他
「styles.xml」に新しいテーマを追加。
マニフェストファイル内の「theme」属性の値を新しいテーマに変更。
【参照】全画面表示を行う方法 ( 通知バー非表示 )
#その他
Resource → Bitmap
Resource → Drawable
Drawable → Bitmap
Bitmap → Drawable
#その他
「R.string.app_name」などで取得できるのはあくまで「リソースID(int型)」。
メソッドの引数では、オーバーロードを使ってリソースIDでも受け取れるようにしている。
内部的には受け取ったリソースIDを使ってリソースを取得している。
直接リソースIDからリソースを取得したい場合は「Resources」クラスを利用する必要がある。
#その他
Kotlin(コトリン)は、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、静的型付けのオブジェクト指向プログラミング言語である。
Kotlin言語は、同社の経験を活かしJava言語をもっと簡潔・安全になるように改良した産業利用向け汎用言語として開発され、2011年7月20日に発表された。
オペレーティング・システムによらずJava仮想マシン上で動く。Java言語で書かれたプログラムと同じほど速くコンパイルされ同じほど速く動作するとしている。
#その他
XAMPPのインスール
別PCから「phpMyAdmin」にアクセスする方法
①下記のファイルを開く。
#その他
table:ショートカットキー一覧(一部抜粋)
説明 ショートカットキー
行またはブロックのエラーの修正方法を表示する Alt+Enter
自動インポート Ctrl+Alt+O
#その他
以下のリンクを参照。
Android Platform は「android.~」のパッケージ、Android Support Library は「android.support.~」のパッケージに対応。
【参照】Android Platform、Android Support Library
#Chapter11 テキスト P.597
サービスの状態をユーザーに通知する方法として、Notificationクラスを利用できます。
また、通知をクリックすることであらかじめ設定されたアクティビティを起動することもできます。
table:NotificationCompat.Builderクラスの主なメソッド
setContentTitle 通知タイトル
#Chapter11 テキスト P.592
サービスでの処理結果をアクティビティに反映させたい場合は、ブロードキャストを利用します。
ブロードキャストを使って一斉送信された情報を、事前にアクティビティに登録しておいたブロードキャストレシーバーで受け取ります。
table:BroadcastReceiverクラスの主なメソッド
onReceive ブロードキャストを受け取った時の処理
#Chapter11 テキスト P.589
サービスで時間のかかる処理は別スレッドで行うべきですが、サービスで実装を行うのならば、IntentServiceクラスを利用する方法が比較的簡単です。
また、IntentServiceクラスでは呼び出されたサービスは、呼び出された順番に処理されていきます。(先入先出法)
table:IntentServiceクラスの主なメソッド
#Chapter11 テキスト P.586
定期的な処理には「ScheduledExecutorService」クラスや「Timmer」クラスを利用する。
Android用のクラスではなく、一般的なJavaのクラスです。
アクティビティやサービスの中から利用可能です。
定期的なタスクを実行
#Chapter11 テキスト P.581
アクティビティのように画面を持たず、バックグラウンドで動き続けるプログラムをサービスを言います。
table:Serviceクラスの主なメソッド
onCreate 初回起動時の処理
onStartCommand サービス開始時の処理
#Chapter10 テキスト P.576
マニフェストファイルに権限を追加します。
「Vibrator」オブジェクトを取得する。
「vibrate()」メソッドでバイブレーションを行う(1回のみ)
「vibrate()」メソッドでバイブレーションを行う(繰り返し)
#Chapter10 テキスト P.572
「GestureDetector」オブジェクトを生成する。
「GestureDetector」オブジェクトに「onTouchEvent」メソッドの引数からイベント情報を渡す・
▼以下はサンプルプログラムです▼
アクティビティ
#Chapter10 テキスト P.563
「センサー管理オブジェクト(SensorManager)」から「センサー(Sensor)」を取得する。
センサーの情報が変化した時の処理をイベントリスナーとして用意する。
「センサー管理オブジェクト(SensorManager)」にイベントリスナーを設定する。
「センサー管理オブジェクト(SensorManager)」からイベントリスナーを削除する。
#Chapter10 テキスト なし
サンプルプログラム
※事前に「raw」フォルダにサウンドファイルを用意してください。
以下に処理の流れを記述します。
①再生の準備(AudioAttributes)
#Chapter10 テキスト なし
以下の内容を参考にしてください。
またインターネット接続については「Android9以降でHTTP通信できない場合の対策」も参照してください。
【参照】AndroidのMediaPlayerについての備忘録
【参照】Androidアプリでマルチメディアを扱うための基礎知識
#Chapter10 テキスト P.553
「音楽・音声管理」オブジェクトを取得
※「Context.AUDIO_SERVIC」は音楽・音声関連のサービス
※他にはアクティビティを管理する「Context.ACTIVITY_SERVICE」や位置情報を管理する「Context.LOCATION_SERVICE」等があります。
デフォルトの音量を指定
#Chapter10 テキスト P.550
「create()」メソッドでメディアプレイヤーのオブジェクトを取得
※第1引数には「コンテキスト」、第2引数には「音楽ファイル(id値)」を指定する。
※createメソッドは下記のprepareメソッドを含みますので、一緒に利用しないでください。
「prepare()」メソッドでメディアプレイヤーを準備。
#Chapter10 テキスト なし
長めの曲を再生する場合には「MediaPlayer」、効果音などを再生する場合には「SoundPool」が向いている。
table:MediaPlayerとSoundPoolの違い
MediaPlayer SoundPool
再生遅延 あり。利用時にロード。 少ない。事前にロード。
#Chapter10 テキスト P.544
非同期にデータのやり取りを行うクラスとしてAsyncTaskクラスがありますが、読み込みに特化したAsyncTaskLoaderクラスを利用することもできます。
AsyncTaskクラスが非同期処理とメインスレッド(UI)の処理とをひとつのクラスでまとめていたのに対して、AsyncTaskLoaderクラスでは、両者を明確に分離できるのが特徴です。
#Chapter10 テキスト P.527
Androidでは、ネットワーク通信を行う処理をメインスレッドで行うことができません。
ネットワーク通信はアプリ内部の処理と比べると非常に低速で、ネットワーク通信をメインスレッドで行うと、アプリ全体のレスポンスが低下してしまいます。
よって、ネットワーク通信は別スレッドから行う必要があります。
table:AsyncTaskクラスの主なメソッド
#Chapter10 テキスト P.508
現在位置は「FusedLocationProviderClient」オブジェクトの「requestLocationUpdates()」メソッドに「①設定リクエスト情報」と「②位置情報取得時の処理」を渡すことで取得できます。
「①設定リクエスト情報」は「LocationRequest」オブジェクトで位置情報リクエストを作成します。
#Chapter10 テキスト P.505
標準地図に切り替え
「GoogleMap」オブジェクトの「setMapType()」メソッドで「GoogleMap.MAP_TYPE_NORMAL」を指定する。
衛星写真に切り替え
「GoogleMap」オブジェクトの「setMapType()」メソッドで「GoogleMap.MAP_TYPE_SATELLITE」を指定する。
#Chapter10 テキスト P.502
GoogleMapを表示するには、まずアクティビティで「OnMapReadyCallback」インタフェースを実装します。
続いて「SupportMapFragment」オブジェクトを取得し、「getMapAsync()」メソッドで「GoogleMap」オブジェクトを非同期で取得します。
最後に、マップが準備できた時に呼び出される「onMapReady()」メソッドをオーバーライドし、引数で渡されてくる
#Chapter09 テキスト P.467
トランザクションは「ある一纏めの処理」をまとめて処理します。
トランザクションの開始(これ以降はトランザクションの対象処理となります)
トランザクションの確定(トランザクションの開始~確定までの内容が一括で処理されます)
トランザクションの終了(ここまでがトランザクションの内容となります。)
#Chapter09 テキスト P.473
データベース内のデータを操作するには「SQLiteDatabase」オブジェクトが必要です。
「SQLiteDatabase」オブジェクトを取得する(書き込み専用)
「SQLiteDatabase」オブジェクトを取得する(読み込み専用)
「SQLiteDatabase」オブジェクトを使ってデータベースの操作を行うには2つの方法があります。
#Chapter09 テキスト P.460
データベースを利用するには、まずデータベースやテーブルの準備を行うヘルパークラスを実装する必要があります。
「SQLiteOpenHelper」クラスを継承した新しいクラスを作成します。
「コンストラクタ」を定義します。
「onOpen()」メソッドを実装します。(必須ではありません)
#Chapter09 テキスト P.494
設定定義ファイル ※一部のみ記載
#Chapter09 テキスト P.493
設定定義ファイル ※一部のみ記載
アクティビティ側で設定値を取得 ※一部のみ記載
配列の設定(strings.xml) ※一部のみ記載
#Chapter09 テキスト P.492
設定定義ファイル ※一部のみ記載
アクティビティ側で設定値を取得 ※一部のみ記載
配列の設定(strings.xml) ※一部のみ記載
#Chapter09 テキスト P.492
設定定義ファイル ※一部のみ記載
アクティビティ側で設定値を取得 ※一部のみ記載
#Chapter09 テキスト P.491
設定定義ファイル ※一部のみ記載
アクティビティ側で設定値を取得 ※一部のみ記載
#Chapter09 テキスト P.484
1. 事前に「preference-v7」ライブラリを追加する。
P.439の手順を参考に追加してください。
2. 設定定義ファイルを設定する。
3. 設定画面のフラグメントクラスを用意する。(「PreferenceFragmentCompat」クラスを継承する)
#Chapter09 テキスト なし
プレファレンスに値を保存する方法
プレファレンスから値を取得する方法
※プレファレンスの保存先は「/data/data/<プロジェクト名>/shared_prefs」の配下にXMLファイルとして保存されています。
【参照】Preference使用方法、SharedPreferencesに出力したデータの確認、[SharedPreferencesの使い方(基礎編) https://qiita.co
#Chapter09 テキスト P.450
ファイルを読み込む準備
読み込む処理
#Chapter09 テキスト P.444
ファイルを書き込む準備
書き込む処理
#Chapter08 テキスト P.412
なぜ、以下のように記述できることの解説を行う。(addメソッドが呼び出せる理由)
匿名クラス
コンストラクタ呼び出し直後に{ }ブロックを置くと匿名クラスの宣言・初期化になります。
初期化ブロック
#Chapter08 テキスト P.412
渡す側では、Bundleクラスでデータを用意し、setArgumentsメソッドでフラグメントクラスに設定。
受け取る側では、getArgumentsメソッドでBundleクラスを受け取り、データを取り出す。
#Chapter08 テキスト P.406
配置するフラグメントを直接指定する場合(静的に配置)
1. Fragmentクラスを継承したクラスを用意する。
2. レイアウトファイルに<fragment>タグを配置し、name属性でフラグメントクラスを指定する。 ※一部のみ記載
配置するフラグメントをJavaコードから指定する場合(動的に配置)
#Chapter06 テキスト P.275
メニュー定義ファイル
アクティビティファイル
!オプションメニューでは「onCreateOptionsMenu()」「onOptionsItemSelected()」をオーバーライドします。
!コンテキストメニューでは「onCreateContextMenu()」「onContextItemSelected()」をオーバーライドします。
#Chapter06 テキスト P.250
以下のような、AクラスとBクラスが宣言されていたとします。
Aクラス
Bクラス
通常は以下のようにメソッドを記述する
#Chapter06 テキスト P.247
メインアクティビティ
レイアウトファイル
フラグメント(シンプルなダイアログ)
フラグメント(「はい」「いいえ」「キャンセル」ボタン)
#Chapter05 テキスト P.203
絶対値を使ってビューグループの幅(「layout_width」属性)や高さ(「layout_height」属性)を指定することができます。
table:指定できる単位
単位 概要
dp 解像度に依存しない単位
#Chapter05 テキスト P.202
ウィジェットやビューグループの幅(「layout_width」属性)や高さ(「layout_height」属性)に指定できる値として以下のキーワードがあります。
「wrap_content」
コンテンツのサイズに併せてウィジェットやビューグループのサイズが決まります。
「match_parent」
#Chapter04 テキスト なし
ListViewの項目をクリックした時に呼ばれる「OnItemClickListenerリスナー」を登録し、イベントハンドラーである「onItemClickメソッド」の中から、インテントを使って別画面(アクティビティ)を起動する。
#Chapter04 テキスト なし
ひとつの画面がリストだけで構成されているならば、標準のActivityクラスの代わりにListActivityクラスを利用することで、レイアウトファイルも用意することなく、アクティビティの準備だけで画面を生成できます。
ListActivityでレイアウトファイルを指定することもできます。
条件は以下の通り
・<ListView>要素の「id」要素は「@+id/android:list」で固定。
#Chapter04 テキスト P.182
RecyclerViewはListViewよりも自由度が高いリストを生成し、ビューを再利用しながらリストを処理しますので、より大きなデータセットを効率的に処理できます。ListViewに比べて、リストを生成するための役割が個々のクラスに明確に分離されている点も特徴です。
アクティビティ
アダプター
ビューホルダー
#Chapter04 テキスト P.173
リスト用のデータ
リスト用のレイアウト
アダプタークラス
アクティビティ
#Chapter04 テキスト P.169
リスト用のレイアウト
アクティビティ
レイアウトファイル
#Chapter04 テキスト P.144
配列リソースでリストを作成する方法
動的にリストを作成する方法
#Chapter03 テキスト P.138
WebViewを利用することで、アプリにWebページを埋め込めるようになります。
#Chapter03 テキスト P.136
RatinBarは、レートの表示・更新を行うためのウィジェットです。
#Chapter03 テキスト P.128
Spinnerとは、画面上に表示されたボタンをタップすることでリストがポップアップして項目を選択できるウィジェットです。
【参照】配列リソース
#Chapter03 テキスト P.130
「strings.xml」で配列で設定できます。
【参照】Spinner
#Chapter03 テキスト P.125
SeekBarは、「ある範囲内の連続した数値」を入力するのに適したウィジェットです。
#Chapter03 テキスト P.122
RadioButtonは、あらかじめ用意された選択肢から特定の項目を単一選択させるためのウィジェットです。
※RadioButtonを単体で利用することはできない。
#Chapter03 テキスト P.121
Switchは、ある項目のオンオフを表すためのウィジェットです。
【参照】CheckBox、ToggleButton
#Chapter03 テキスト P.120
ToggleButtonは、ある項目のオンオフを表すためのウィジェットです。
【参照】CheckBox、Switch
#Chapter03 テキスト P.117
CheckBoxは、ある項目のオンオフを表すためのウィジェットです。
【参照】ToggleButton、Switch
ImageButton
#Chapter03 テキスト P.108
ImageButtonは画像ボタンを作成します。
srcCompat属性
画像リソースを「@drawable/ベース名」の形式で指定します。
#Chapter03 テキスト P.111
EditTextは、入力ウィジェットの中でも最も汎用的なテキストボックスを生成します。
inputType属性
テキストボックスに入力するデータの種類を限定できます。
lines属性
#Chapter03 テキスト P.108
画像セレクターとは、(例えば)ボタンの状態に応じて、それぞれどの画像を表示するかを選択する為の定義ファイルです。
state_pressed属性
ボタン押下時の画像を指定する場合は「true」にする。
state_focused属性
#Chapter03 テキスト P.104
ImageViewは画像を表示するためのウィジェットです。
srcCompat属性
画像リソースを「@drawable/ベース名」の形式で指定します。
contentDescription属性
#Chapter03 テキスト P.100
TextViewとは、テキストを表示するための、いわゆるラベルの役割を果たすウィジェットです。
autoLink属性
TextViewに含まれるメールアドレスやURL、電話番号などに対して自動的にリンクを設置できます。
lineSpacingMultiplier属性
#Chapter02 テキスト P.88
Bundle とは
Android アプリ開発のさまざまなところに出てくる オブジェクトの入れ物 である。
本当に頻出するので Bundle の扱いに慣れているといろいろと捗る。
インテント発行時
#Chapter02 テキスト P.89
画面を固定したい場合はマニフェストファイルに「screenOrientation」属性を追記します。
ただし、現在では上記の記述だけではワーニングが表示されるようになっています。
ワーニングを非表示にするには「xmlns:tools」属性と「tools:ignore」属性も追記してください。
【参照】Qiita
#Chapter02 テキスト P.87
画面を回転させた場合、画面はいったん破棄され、改めて再作成されています。
画面の状態を保存するにはBundleクラスを利用します。
【参照】データの受け渡し(Bundleクラス)
#Chapter02 テキスト P.83
新しいクラスを作成してリスナーを実装する方法
自分のクラスで継承してリスナーを実装する方法
匿名クラスを使ってリスナーを実装する方法
#Chapter02 テキスト P.83
イベントリスナーとは、なんらかのイベント(ボタンを押すなど)が発生した時に呼び出されるメソッド(イベントハンドラー)が用意されたイベント専用のインタフェースです。
Androidの世界では、画面でなんらかのイベントが発生すると、発生元(ウィジェット)にイベントリスナーが登録されていないかを調べ、対応するイベントリスナーが見つかった場合には、そのメソッドを実行します。
#Chapter02 テキスト P.82
レイアウト上のウィジェット(部品)のオブジェクトを取得するには「findViewById()メソッド」を利用します。
findViewById()メソッドの戻り値はView型(スーパークラス)なので、対象の型に変換(キャスト)する必要があります。
※変換(キャスト)はAndroidStudio3.0以降、かつ、APIレベル26以降は不要になりました。
#Chapter02 テキスト P.79
イベント(ボタンを押すなど)が発生したタイミングで実行するべきコード(メソッド)のことをイベントハンドラーと言います。
アクティビティ
レイアウト
※「アクティビティで指定したメソッド名」と「レイアウトのonclick属性で指定した名前」が一致していること。
#Chapter02 テキスト P.79
イベントドリブン型とは「イベントの発生をきっかけとして処理を始める」タイプのプログラムのことです。
たとえば、マウスをクリックしたり、キーボードのキーを押したり、画面をタップしたりしたタイミングで、その操作に対応する処理が実行されます。
【参照】イベントドリブン型
#Chapter02 テキスト P.71
すべてのアプリには、そのルート ディレクトリに AndroidManifest.xml(ファイル名はこのまま)が必要です。
マニフェストファイルはアプリに関する重要な情報を Android システムに提供します。
マニフェストファイルとは作成したアプリの基本的な情報が書かれているファイルのことです。Androidアプリを作成する場合は必須で、Android Studioでプロジェクトを作成すると自動的に作られます。
#Chapter02 テキスト P.70
Androidは機器の状態、言語設定に応じて、アプリケーションのリソース(画像、文字列、その他Rawデータ)を自動で選択できます。
英語やドイツ語など各地域にあわせたリソースを用意するだけで、さまざまな地域へ向けたローカライゼーションが可能です。
多言語対応
リソースの多言語対応は、res/以下のディレクトリ(たとえばres/values)に修飾子(言語コード、[国名コード https://ja.wikipedia.org/wiki/%E5%9B%BD%E5%90%8D%E
#Chapter02 テキスト P.62
ウィジェットやビューグループ(レイアウト)の総称。
JavaではViewクラスとして表現され、ウィジェットやビューグループ(レイアウト)のクラスは全て、このViewクラスの子クラスとなります。
#Chapter02 テキスト P.65
ウィジェットをまとめたり、どのように配置したりするかを決めるのが、ビューグループ(レイアウト)です。
LinearLayoutやRelativeLayoutなどが標準で用意されています。
ビューグループ(レイアウト)はクラスで表現することができ、その全てのクラスはビュークラスの子クラスとなっています。
#Chapter02 テキスト P.65
ウィジェットは画面を構成する部品です。
ボタンやラジオボタン、チェックボックス、テキストボックス、リストビューなどが標準で用意されています。
ウィジェットはクラスで表現することができ、その全てのクラスはビュークラスの子クラスとなっています。
#Chapter02 テキスト P.62
プロジェクトに設置したリソース(レイアウトや画像など)をプログラムの中から利用するため、各リソースにはリソースIDが割り当てられます。リソースIDは「R.java」と言う名前のファイルで管理されます。
「R.java」ファイルは初めてプロジェクトをビルドした時に作成され、その後ビルドが行われるたびに自動的に更新されていきます。その為、ユーザーはリソースの追加だけを行っておけばリソースに対するIDの管理などは行う必要がありません。
#Chapter01 テキスト P.9
インテル® Hardware Accelerated Execution Manager (インテル® HAXM) は、インテル® バーチャライゼーション・テクノロジー (インテル® VT) を使用するハードウェア支援による仮想エンジン (ハイパーバイザー) で、ホストマシン上で Android* アプリケーションのエミュレーションを高速化します。インテルから提供されている And
#Chapter01 テキスト P.6
table:Androidのバージョン
コードネーム バージョン リリース日 APIレベル シェア
KitKat 4.4 – 4.4.4 2013年10月31日 19 - 20 4.0%
Lollipop 5.0 – 5.1.1 2014年11月12日 21 - 22 9.2%
#Chapter01 テキスト P.6
iOSとAndroidはどっちが多い?
iOSが28.28%に対して、Androidは70.9%。
※2021年8月時点
Androidが多い理由とは?