- 1. 2. Android学習 Layout、View編
- 2. 1. Android学習 AndroidStudioのインストール〜HelloWorld編
- 3. ちょっと便利にするRx
- 4. #6 Kotlin Koans Introduction/Data classes 解説
- 5. Navigation Architecture Componentで現在アクティブなFragmentか判定する方法
- 6. Android で各ストレージの総容量、空き容量を取得する方法
- 7. #5 Kotlin Koans Introduction/Strings 解説
- 8. Androidアプリ開発の準備
- 9. AndroidアプリをGooglePlayConsoleで好きなタイミングで公開する
- 10. 自宅以外の場所にいる子供の位置情報を全自動で通知できたら、少しは安心できるかもしれない
- 11. TimePickerDialogで未来時刻が選択出来ないようにする
- 12. 難読化されたメソッド名を特定する
- 13. (Win版AndroidStudioを使っている)Android開発者に贈る 俺流最高のショートカットキーカスタマイズ
- 14. #4 Kotlin Koans Introduction/Lambdas 解説
- 15. 【Android / Java】表示Fragmentによりイベントを切り替える
- 16. Google Play Consoleで APK拡張ファイル(.obbファイル)をアップロードする方法
- 17. 「端末の戻るボタン・画面クリック」でダイアログを終了させない方法
- 18. firebaseのCrashlyticsの移行
- 19. TermuxでFirebaseを使いたい
- 20. [Android]PUSH通知
2. Android学習 Layout、View編
**勉強できること**
LayoutとViewの関係性
基本的なLayout、Viewの種類**前提**
AndroidStudioのバージョン:4.0.1
言語:Java# 1. HelloWorldの実装内容の確認
前回の1. Android学習 AndroidStudioのインストール〜HelloWorld編 からの続きとなります。
上記で作成したプロジェクトを開きます。
MainActivityファイルを開きます。
このファイルがアプリの土台となっているActivityクラスとなります。
(Activityについては別の章で説明する予定なので、ここでは割愛します)MainActivityファイルには下記のようにコードが書かれています。
末尾の行の”setContentView(R.layout.activity_main);”が
アプリで表示するレイアウトファイルを指定するコードです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718108/0b10e917-75
1. Android学習 AndroidStudioのインストール〜HelloWorld編
**勉強できること**
AndroidStudioのインストール方法
プロジェクトの作成方法
基本的なAndroidStudioの使い方
エミュレータでアプリの実行**前提**
AndroidStudioのバージョン:4.0.1
言語:Java
環境:作成者の環境はMacです。
Windowsだと少し見た目や環境の設定方法が違うかもしれませんが基本的には同じです。#1.AndroidStudioのインストール
公式サイトへアクセスして最新のAndroidStudioをダウンロードします。
https://developer.android.com/studio?hl=ja公式サイトの手順にしたがってインストールを進めます。
https://developer.android.com/studio/install?hl=ja基本的には「Next」を押して進めていけば問題ないです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/718108/4de5c690-5137-
ちょっと便利にするRx
割とよく使う小技。
## リジューム可能なsubcribe
一度、onErrorが呼ばれるとそのストリームに値を流せません。(すでにエラーが起きているよ。と値を流すと例外が飛んでくる)
イベントハンドラ的にobservableを使っていると、一度エラーが起きても復帰させて継続的にイベントを受けたいような時があると思います。
エラー → dispose → 再度subscribeなんていちいちやってられないので、そんな時は、一度 materialize すれば大丈夫です。“`kotlin
// T型を受けるコールバック関数
typealias OnNext= (T) -> Unit
typealias OnError = (Throwable) -> Unit
typealias OnComplete = () -> Unit@CheckReturnValue
funObservable .resumeSubscribeBy(
onError: OnError? = null,
onComplete: OnComplete? = null
#6 Kotlin Koans Introduction/Data classes 解説
#1 はじめに
Kotlin公式リファレンスのKotlin Koans/Data classesの解説記事です。
Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。
ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**一度各自で挑戦してから、お目通し頂ければと思います:fist:
#2-1 クラス定義・コンストラクタ
Kotlinでは`class`というキーワードをつけることでクラスを定義します。
クラス名の右横に`()`で囲んでコンストラクタを実装することができます。
コンストラクタは、クラスをインスタンス化するのと同時に呼ばれる関数のことです。
コンストラクタには2つの働きがあります。
・ プロパティを定義すること。
・ クラスのインスタンス化とパラメータの初期値の設定を同時に行うこと。
クラス定義・コンストラクタの実装を実際のコードで確認してみましょう。
“`
//クラス定義。Invoiceがクラス名。
class Invoice { /*…*/ }//空の
Navigation Architecture Componentで現在アクティブなFragmentか判定する方法
Navigation Architecture Componentでイベントの中で画面遷移処理行う場合に、
ダイアログの裏側のFragmentが反応してしまい、backStackがおかしくなることが頻発したため、
自身がアクティブなFragmentか判定するために、extensionを書いたのでメモしておきます。## サンプルコード
“`Kotlin:Fragment.kt
package com.example.extensionimport androidx.fragment.app.Fragment
import androidx.navigation.NavDestination
import androidx.navigation.fragment.DialogFragmentNavigator
import androidx.navigation.fragment.FragmentNavigator
import androidx.navigation.fragment.findNavController/**
* isCurrentDestinatio
Android で各ストレージの総容量、空き容量を取得する方法
Android 10(Q)から導入されたScoped Storageの影響で、以前のストレージの容量関連の取得ができなくなっていたため、Android 10以降でも利用できる方法を模索したのでメモしておきます。
※ ディレクトリ毎のパーミッションを取ればできますが、
容量関連の情報を取るためだけに、ユーザにパーミッション許可を求めたくなかったため、
StatFsを用いた方法にしてあります。なお、勢いで書いたので、実際には動かしてないです。。。
※サンプルコードの他に外部ストレージアクセスのパーミッション取得が必要な可能性あり。## サンプルコード
“`Kotlin:MainActivity.kt
package com.example.storage.uiimport android.annotation.SuppressLint
import android.os.Build
import android.os.Bundle
import android.os.StatFs
import android.os.storage.StorageManager
impo
#5 Kotlin Koans Introduction/Strings 解説
#1 はじめに
Kotlin公式リファレンスのKotlin Koans/Stringsの解説記事です。
Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。
ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**一度各自で挑戦してから、お目通し頂ければと思います:fist:
#2 正規表現・エスケープシーケンス
正規表現(regex patterns)とは、**文字列に関する文法事項**とイメージして頂ければOKです。
特殊な記号を用いて文字列パターンを指定します。
エスケープシーケンスとは、画面上に文字を出力する際に、文字そのものを出力するのではなく、文字色の変更やカーソルの移動、文字の消去など、文字出力の制御を行う特殊な文字列のことです。
`/` 記号と他の記号のセットで用います。
([エスケープシーケンス(エスケープ文字)とは? ~見えない文字を表現する~|データ分析用語を解説](https://www.gixo.jp/blog/12406/#:~:text=%E3%82%A8%E3%
Androidアプリ開発の準備
#概要
20代後半の現SEです。
SIerに所属していますが、業務内容が技術とは離れているため、スキルアップのために自己学習を行っています。
今までも、PHPやPython等を勉強してきまいしたが、効率的なスキルアップにはインプットだけでなく、アウトプットも大事ということで、Qiitaに投稿しようと思いました。何故Androidアプリかというと、以下の理由です。
①自分が持っているスマホがAndroidのため
②所持しているOSがWindowsのため(iPhoneアプリはMacが必要)
③現時点でポピュラーなJavaを習得できる
④広告収入をつければ儲けの仕組みを併用で勉強できる(儲けは考慮しない)本当は今までやっているWeb系でもよかったのですが、どうせなら新しいことを学びたいと思いAndroidアプリを選びました。
#Androidアプリについて
###言語
– Java
– Kotlin
– C言語
– RubyAndroidアプリの開発ではJavaとKotlinが有名なようですが、Javaを選択しました。
###IDE
JavaではEclipse
AndroidアプリをGooglePlayConsoleで好きなタイミングで公開する
Androidアプリの公開タイミングについて
審査後すぐ公開ではなく、自分の好きなタイミングで公開する手順を試したので
書き記しておく公式のヘルプ
https://support.google.com/googleplay/android-developer/answer/9859654?hl=ja# 前情報
– 新しいUI(2020/11/2〜)を使用# 手順
1. GooglePlayConsoleにログイン > アプリ指定
2. 左メニュー > 公開の概要
3. 管理対象の公開のステータスを「オン」にする ![スクリーンショット 2020-10-10 11.26.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6568/944f3363-35fe-c5bd-0404-cedad48a8e38.png) ![スクリーンショット 2020-10-10 11.26.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws
自宅以外の場所にいる子供の位置情報を全自動で通知できたら、少しは安心できるかもしれない
# はじめに
小学校の中~高学年ともなると、塾や習い事、友達の家に遊びに行ったりなど、一人で外出することが多くなるかと思います。
親としては子供が一人で外出している最中に、どこにいるのか、変なことに巻き込まれていないかなどを常に心配なものです。
子供が今どこにいるかが分かれば、少しは心配も減る・安心できるかと思い、子供に持たせたスマホ位置情報を全自動で通知する仕組みを作りました。スマホは Andorod、自動化処理は [**Macrodroid**](https://play.google.com/store/apps/details?id=com.arlosoft.macrodroid&hl=ja) を使用します。
Macrodroid とは、自分で設定した処理を実行できる Android アプリです。すべて GUI で設定ができるため、プログラマーでなくても直感的にスクリプトが作成できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/155700/54e24145-3364-
TimePickerDialogで未来時刻が選択出来ないようにする
TimePickerDialogで未来時刻が選択出来ないようにしようと思った。
しかし…
実装方法を探しに探したが、全く見つからぬ٩( ᐛ )و
そして私は **[MaterialDateTimePicker](https://github.com/wdullaer/MaterialDateTimePicker)** というライブラリに出会った。
### 実装してみる
– build.gradleのdependenciesに以下を追加
“`kotlin
implementation ‘com.wdullaer:materialdatetimepicker:4.2.3’
“`– MaterialDateTimePickerを表示してみる(ボタンをクリックしたらダイアログが表示されるようにしています)
“`kotlin
class MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {
super.onCrea
難読化されたメソッド名を特定する
Androidアプリを難読化して動かすと、例外が発生することがあります。
スタックトレースを見ても難読化により、どのメソッドで例外が発生したのかわかりません。
そんなとき、例外発生したメソッドを特定する方法です。# 難読化
Androidでは、セキュリティやサイズ縮小を目的に以下の設定を行うことがあります。“`groovy:build.gradle
minifyEnabled true
shrinkResources true
“`この設定で動かしてみると、例外が発生することがあります。
# 難読化で例外発生して困ること
以下の実装があるとします。
“`java:Calc.java
package com.example.myapplication;public class Calc {
public int divide(int param1, int param2) {
return param1 / param2;
}
}
“`“`java:MainActivity.java
package com.exampl
(Win版AndroidStudioを使っている)Android開発者に贈る 俺流最高のショートカットキーカスタマイズ
# 概要
Windows版AndroidStudioを使っている全アプリ開発者に贈る、俺流最高のショートカットキーカスタマイズを紹介します。
# はじめに
Windowsのショートカットキーは貧弱過ぎる。
MacとかLinuxなら、十字キーに手を伸ばさなくても済むショートカットキーが標準で用意されているのに、なんでWindowsには無いんだ。ほんと、十字キーに手を伸ばすのが面倒。PageUpもPageDownもHomeもendもctrl+左右も何もかも面倒。はーストレス。ん、AndroidStudioでは、ショートカットキーのカスタマイズができるのか。
でもそうは言っても特定の機能とか、ウィンドウ表示とかそういうのだけで
俺がストレスに感じているこういうのは、解決できないんでしょ。知ってる知ってる。…え、できるの…!?まじで…!?
# AndroidStudioのショートカットキーは何でも有りなんです
まずはAndroidStudioのショートカットキーの一覧を確認しましょう。
File > Setting > KeyMap でショートカット一覧を確認で
#4 Kotlin Koans Introduction/Lambdas 解説
#1 はじめに
Kotlin公式リファレンスのKotlin Koans/Lambdasの解説記事です。
Kotlin Koansを通してKotlinを学習される人の参考になれば幸いです。
ただし、リファレンスを自力で読む力を養いたい方は、
**すぐにこの記事に目を通さないで下さい!**一度各自で挑戦してから、お目通し頂ければと思います:sunny:
#2-1 無名関数
Kotlinでは、変数に**関数**を代入できる特徴があります(このとき関数を**関数オブジェクト**と呼びます。)。
代入するには、
“`
fun example(){
val x = ::plus
val y = ::minus
}fun plus(x:Int, y:Int) = x + y
fun minus(x:Int, y:Int) = x – y
“`このように関数を定義して、それに**::**という記号をつけます。
また以下のように、変数への代入と関数の定義を同時に行うことができます。
“`
val x = fun(x:Int, y:Int) = x + y
`
【Android / Java】表示Fragmentによりイベントを切り替える
# はじめに
Android Studio(java)でアプリを開発していて、「表示しているフラグメントに応じて端末の戻るボタンを押した時の処理を切り替える」という実装をしたい場面があった。
そのときに学んだ内容を投稿します。# 学んだ内容
コードの一部を記載## ActivityからFragmentを表示
このアクティビティxmlファイルにフラグメントを表示させる
“`activity_main.xml
Google Play Consoleで APK拡張ファイル(.obbファイル)をアップロードする方法 Google Play Consoleで
APK拡張ファイル(.obbファイル)をアップロードしようとしたところ
ハマったので、書き残しておく### 注意
– APKファイルを**一番初めにアップロードする時しか、OBBファイルは追加できない**
– もしOBBファイルを追加忘れても、あとから追加はできない
– 同じバージョンのAPKファイルは再アップできない
– アップロードしたAPKファイルを削除もできない
– **よって、VersionCodeの値を変更後、再アップロードするしか方法がない** (←つらい)
– 新しいUI(2020/11/2〜デフォルトになるらしい)では既存のUIと指定場所が違う
– 今回は新しいUIの画面です### 手順
1. Google Play Consoleにログイン
2. アプリの画面に移動
3. リリース > ご希望のテスト > 新しいリリース作成 (通常のリリース作成手順)
4. APKファイルをアップロードする
5. アップロードが環境すると、APKファイルが表示されるので、その一覧の
「端末の戻るボタン・画面クリック」でダイアログを終了させない方法
“`kotlin
AlertDialog.Builder(activity, R.style.Dialog)
.setTitle(“タイトル”)
.setMessage(“メッセージ”)
.setCancelable(false) // setCancelableでfalseをセット
.show()
“`
firebaseのCrashlyticsの移行
「2020 年 11 月 15 日以降も引き続き Firebase コンソールでクラッシュ レポートを取得するには、一般提供版の Firebase Crashlytics SDK にアップグレードしてください。 」
と言う割に、gradleの設定に手こずったのでメモ。
公式の導入手順はiOS版の設定しか見れない…。なぜか、Androidの方を見ようとしてもiOSの手順が表示されてしまう。ブラウザの問題かなー。
2020/10時点では、バージョンもシビア?(多分レポジトリ 設定が足りてないせい)で、crashlytics:17.2.2が見つからなく、バージョンをあげるとビルドできなかった….。### プロジェクトのbuild.gradle
“`gradle
dependencies {
classpath ‘com.google.gms:google-services:4.3.3’
classpath ‘com.google.firebase:firebase-crashlytics-gradle:2.3.0’
}
“`### アプリケーション
TermuxでFirebaseを使いたい
# 背景
※執筆時点のfirebase-toolsは8.12.0です。
[Termux](https://termux.com/)で[Firebase](https://firebase.google.com/)のエミュレータを起動したかった。
Termuxでもfirebase-toolsが入れられるので、firebase emulatorsも当然使えると思ったがそうはいかなかった。
firestoreとdatabaseのエミュレータはJavaで実装されているが、TermuxにはJavaが用意されていないため起動できない。そこで、Javaのインストールから`firebase emulators:start –only firestore`を起動できるまでの手順を紹介する。
# 手順
## 0. 準備
既に一通り済んでいる場合は飛ばす。
### Termux
PlayストアからTermuxをインストールする。
### Termuxパッケージ
最低限以下のパッケージが必要になるので、Termux上でインストールする。
– proot
– wget
– vimなど
[Android]PUSH通知
# 概要
ローカル通知について結構前に勉強したことがあった(リモート通知はどうすればいいのか知らなかった)のだが、
だいぶ忘れた状態で、リモート通知のコード見ててどういうことなの・・・・となって、
なるほどねとなるまでにかなり時間がかかったのでメモ# PUSH通知とは
– PUSH通知はその発火トリガーによってローカル通知とリモート通知に分類されている。
– ローカル通知:発火トリガーがローカルのなにかの処理
– リモート通知:発火トリガーがFCMからのメッセージ受信
– PUSH通知の本質的な処理・・・すなわち**「通知領域への表示」〜「通知タップ時の画面遷移処理」のやり方は全く同じ** ←ここがわかってなかった
– なお、**単純にPUSH通知という場合はリモート通知のことを指すことが多い。** ←さらにここでやられた
– FCMメッセージ送信=PUSH通知と捉えている記事が世にめちゃくちゃ多いが、コレ多分嘘で、ここが理解を妨げていたんだと思う。
Qiita記事とかで**FirebaseからPUSH通知を送信!みたいな図をよく見かけてたせいで、完全にだま