- 1. AndroidのJUnitテストは超ムズい(4)
- 2. JetpackComposeでFirebaseAuth(Google認証)
- 3. Flutter?audioplayers を使ったのに ios, android 端末で音が鳴らない、小さい時の対処法
- 4. 【Android】FireBase DynamicLinks経由でアプリインストールしたらストアに「開く」ボタンが出ない
- 5. Android EspressoでクイズアプリのUIテストを導入してみた (Windows)
- 6. 【Android】GoogleMapの専用UIの位置を変える【Kotlin】
- 7. JetpackComposeでFirebaseAuth(GoogleOneTap認証)
- 8. jetpack composeで遷移先から遷移元にデータを返す
- 9. Androidで読み取り専用のNFCタグを作成する
- 10. 小ネタ:リモートワークに役立つ Android Studio の機能(端末の画面共有)
- 11. 【Android/Java】外部アプリ起動(Android11)
- 12. [Android]Android14(APIレベル34)の影響範囲と実装コードの対応について
- 13. [`Process 〜 has died`] アプリが頻繁にクラッシュする Android 端末の相談対応に logcat を使って調査/改善した
- 14. 【Android】一定時間毎に何かをする処理【Kotlin】
- 15. Jetpack Composeのテストで出てくるmerged tree、unmerged treeとは何か
- 16. Ionic/Angular/SQLiteとcordova(Android)
- 17. IO処理を待ってから画面遷移する方法
- 18. Android14の重要そうな差分まとめ
- 19. JetpackComposeでFirebaseAuth(パスワード認証)
- 20. SkyWay Android SDK クイックスタートが残念な件
AndroidのJUnitテストは超ムズい(4)
# AndroidでAlertDialogを使っている場合のテスト
AndroidでEditTextの入力値チェックで不正だった場合、AlertDialogを使う場合があります。他、何かとユーザに注意喚起させたい場合に使うことがあると思います。Fragment方式(Activity1個に対してFragment複数で画面遷移する方式)でFragmentをinstrumentテストすると、AlertDialogを使っているとうまく動きません。何もせずに実行するとAlertDialogが出たところで・・・
“`
androidx.test.espresso.PerformException: Error performing ‘single click – At Coordinates: 600, 1319 and precision: 16, 16’ on view ‘view.getId() is <2131296376/jp.co.suzuken.ocrexpirchk:id/clearBtn>‘.
at androidx.test.espresso.PerformExcepti
JetpackComposeでFirebaseAuth(Google認証)
# Googleアカウント認証+FirebaseAuth with JetpackCompose
OneTapAuthじゃない方(今までのやり方)のGoogle認証+FirebaseAuth認証を実装していきます。
[OneTap認証](https://qiita.com/jozuko_dev/items/706fc6c89e6982bfd7e2)で実装したクラスを拡張していきます。## 関連記事
– [JetpackComposeでFirebaseAuth(パスワード認証)](https://qiita.com/jozuko_dev/items/f8106009ad4571740d1f)
– [JetpackComposeでFirebaseAuth(GoogleOneTap認証)](https://qiita.com/jozuko_dev/items/706fc6c89e6982bfd7e2)– [GoogleDevelopersのページ](https://developers.google.com/identity/sign-in/android/sign-in?hl=ja
Flutter?audioplayers を使ったのに ios, android 端末で音が鳴らない、小さい時の対処法
AudioPlayer の Global 設定を変更する必要があります。
下記のような関数を作成した場合、
初期化(initialization)時に
`initAudioPlayer()`
を実行してください。
下記のコードはゲームSE を鳴らす場合を想定した設定項目です。
“`
import ‘package:audioplayers/audioplayers.dart’;final AudioContext audioContext = AudioContext(
iOS: AudioContextIOS(
category: AVAudioSessionCategory.ambient,
options: [
AVAudioSessionOptions.defaultToSpeaker,
AVAudioSessionOptions.mixWithOthers,
AVAudioSessionOptions.allowAirPlay,
AVAudioSessionOptions.allowBlu
【Android】FireBase DynamicLinks経由でアプリインストールしたらストアに「開く」ボタンが出ない
# 現象
DynamicLinksのURLを叩いてGooglePlayストアに遷移してアプリインストールしたとき、
インストール後には「アンインストール」と「開く」のボタンが表示されてほしいのに、
「アンインストール」のボタンしか表示されない。ただPlayストアに「開く」ボタンが出ないだけで、
端末のホーム画面にはちゃんとアプリが追加されているのでそこから起動できる。
DeepLinkに渡したパラメータもちゃんと機能する。という、よくわからない現象。
# 原因
AndroidManifest.xmlの設定が原因だった。例えばDynamicLinksのURL(長いURL)が下記のものだったとします。
https://example.page.link?link=https://example.com/test&apn=・・・これは、下記のような意味合いになっています。
* DynamicLinksのURL:https\://example.page.link
* DeepLinkのURL:https\://example.com/test今回の原因は、Android
Android EspressoでクイズアプリのUIテストを導入してみた (Windows)
# 概要
本記事はWindowsユーザー向けにAndroid EspressoでクイズアプリのUIテスト導入までの手順を紹介しています。
# 開発環境
Android Studio
https://developer.android.com/studio/install?hl=ja# 言語
Java# テスト対象アプリ
今回はCode for fun様のクイズアプリを参照させていただきます。(Java)
https://codeforfun.jp/android-studio-quiz-game-1/# 自動化フレームワーク
Espresso
https://developer.android.com/training/testing/espresso?hl=ja# 手順
### 1. Android Studioの[最新版](URL “https://developer.android.com/studio/install?hl=ja”)をインストール
(本記事ではAndroid Studio Flamingo | 2022.2.1を使用)#
【Android】GoogleMapの専用UIの位置を変える【Kotlin】
# はじめに
GoogleMapを用いたアプリでは GoogleMapUIがあり、GoogleMapの操作をUI行うことができます。
ズーム、コンパス表示、現在地ボタン、屋内で使われる階層別で表示できるレベルピッカー、マーカーをタップした時に現れるマップツールバー などがあり 基本的にマップの上端、下端、左端、右端の位置に表示されます。
詳しくは 分かりやすくまとめてくれている記事やAndroid公式を見てもらえればと思います。今回は、その表示位置を変更する方法を記事に残しておこうと思います。
# 実践
公式では、>コントロールを上端、下端、左端、または右端から移動するには、GoogleMap オブジェクトにパディングを追加します。
とあります。
“`
googleMap.setPadding(0,0,0,0)
“`
引数には 第一引数から順に left,top,right,bottom の順に入れていきます。# 参考
https://developers.google.com/maps/documentation/android-sdk/contro
JetpackComposeでFirebaseAuth(GoogleOneTap認証)
# GoogleアカウントのOneTap+FirebaseAuth with JetpackCompose
JetpackComposeで、GoogleアカウントのOneTap+FirebaseAuthを実装していきます。## 関連記事
– [JetpackComposeでFirebaseAuth(パスワード認証)](https://qiita.com/jozuko_dev/items/f8106009ad4571740d1f)
– [JetpackComposeでFirebaseAuth(Google認証)](https://qiita.com/jozuko_dev/items/db904cfa28c8a21bf213)## エンドポイント
### GoogleアカウントのOneTap
| エンドポイント | |
|:–|:–|
| SignInClient.beginSignin(BeginSignInRequest) | OneTap認証画面を表示します |
| signInClient.getSignInCredentialFromIntent(resultDa
jetpack composeで遷移先から遷移元にデータを返す
# はじめに
今回は`JetpackCompose`を使って`setFragmentResult`のように遷移先から遷移元にデータを返す方法を紹介していきます
### 本文
やること自体は至極単純です。
まず、遷移先から遷移元に戻る時に下記のようにします
“`kotlin
navController.previousBackStackEntry?.run {
savedStateHandle[“result”] = “hoge”
}
“`
次に遷移元で結果を受け取るように処理を書きます
“`kotlin
val result: String? = navController
.currentBackStackEntry?.savedStateHandle?.get(“result”)
“`
こうすることで簡単に値を戻すことができます。
ここで注意が必要なのがデータが保持され続けることと何度も`recompose`されてしまう可能性があるということです。
そのため、下記のようにすることで回避することができます。
“`kotlin
navController.cu
Androidで読み取り専用のNFCタグを作成する
## この記事は
Android端末でNFCタグにURIを書き込む際に二度と上書きされないようにNFCタグを読み取り専用にしたい場合が出てくると思います。今回はコーディング一切無しでそれらを実現する方法をご紹介します## 用意するもの
### 使用するアプリ
NFCタグを読み取り・書き込みできるアプリがPlayStoreにあるのでそちらをダウンロードしましょうhttps://play.google.com/store/apps/details?id=com.wakdev.wdnfc&hl=ja
### 使用するNFCタグ
特に理由はないですが比較的安価で評価が高いものを選びました## 具体的な方法
### 書き込み可能か確認
まず、何もデータが入っていない空の状態のNFCタグを読み取って書き込み可能であることを確認します。「読む」のタブに切り替えるとNFCタグの読み取り待機状態になるの
小ネタ:リモートワークに役立つ Android Studio の機能(端末の画面共有)
リモートワークに役立つ Android Studio の機能を知ったので、記事にします。
リモートワーク中に画面共有をしながら打ち合わせをすることがあると思います。
Emulator であれば共有画面で動作を見せることができましたが、Electric Eel からは Android 端末の画面共有も可能となりました。##### 設定方法
**Electric Eel**
Preference -> Experimental -> Device Mirroring -> Enable mirroring of physical Android devices にチェックを入れる
これにより、Running Devices タブで Android 端末を Emulator と同様に Android Studio で表示することができます。
https://android-developers.googleblog.com/2023/01/android-studio-electric-eel.html**Flamingo**
Flamingo では Preference -> T
【Android/Java】外部アプリ起動(Android11)
## やりたいこと
外部アプリを起動したい。
Android11から[package-visibility](https://developer.android.com/training/package-visibility/declaring?hl=ja)が導入され、外部アプリを起動するためのお作法が変更となった
とりあえず、起動させるためのお作法を記載#### AndroidManifest.xml
~~~xml
[Android]Android14(APIレベル34)の影響範囲と実装コードの対応について
## はじめに
毎年iOSもAndroidも夏から秋にかけてメジャーバージョンアップされます。androidはiosほどにコードに変更を加えないといけないほどの致命的なことは少なかった印象です。
今回Android14はそうではないかもしれないということで備忘録メモしておきます。
詳しくはドキュメントを参照してください。
プレビュー版は2月、ベータ版は4月にリリースされているため開発者は動作確認できます。(自分はしていません)
メインスマホはiPhoneを使っているので、Androidはどうもベータ版を入れるモチベーションが出ません。![a.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109862/fefbc461-a3b4-1a30-0b67-b3794ebd9fd5.png)
去年のAndroid13は8月、Android12は10月リリースでした。
今年は8月あたりにリリースされそうです。https://gist.github.com/y-matsumoto/5a48bd982aea5
[`Process 〜 has died`] アプリが頻繁にクラッシュする Android 端末の相談対応に logcat を使って調査/改善した
2019 年ごろ購入した docomo キャリアで購入した Android 端末でアプリが頻繁にクラッシュすると相談を受けた。
調査/改善したため対応ログをまとめます。
## 相談時の現象
Android 8.1
– 前日にはふつうに使えていた。
– アプリが頻繁にクラッシュする前後に特殊な操作はした覚えがない。
– よくクラッシュするアプリと現象は以下だった。
– LINE(SNS):アプリを開いて数秒は動作するがそのあとクラッシュ
– ツムツム(ゲームアプリ): スプラッシュ画面が出る前にクラッシュ
– ほかのアプリもクラッシュしていたが、上記アプリよりひどくなかった
– 再起動は相談前に数回していて改善しなかった。
– 「設定」→「ストレージ」でストレージは合計128GB で空きは 8GBだったので満タン付近だった。
– 「設定」→「ストレージ」→「メモリ」で3時間の平均メモリ使用量が合計 6GB、使用 2.5GBなことを確認した。
– 設定アプリはふつうに動いていた。
– 開発向けオプションは有効になっていない。(使っていたのはエンジニアではなく特殊な設定は
【Android】一定時間毎に何かをする処理【Kotlin】
# 実践
“`
Timer().schedule(0, 1000) {
// 繰り返し行いたい処理
}
“`Timer().schedule()というものを使っていきます。
Android 公式では
> 指定された遅延後に開始される、 指定されたタスクの繰り返し固定遅延実行をスケジュールします。
とあります。第一引数に 何秒後に開始するか。(m秒)
第二引数に 何秒毎間隔で実行するか。(m秒)
処理を終わらせたい場合は {}内に **this.cancel()** でTimer()をキャンセルすることで繰り返し処理をキャンセルできる。# 終わりに
こういった時間を使う系のものは少し前に記事にした、Handlerなんかでもできるんだろうなと思いつつ、あえて違う方法でやってみました。
どちらが使いやすくて、どういったメリットデメリットがあるのか イメージしながら実装していくためにもう少し知っていきたいですね。# 参考
https://developer.android.com/reference/java/util/
Jetpack Composeのテストで出てくるmerged tree、unmerged treeとは何か
かなり基本的なことなんですが、よく分かっていない方も多いのではと思い書いています。
Jetpack Composeで開発していて以下のようなエラーに遭遇しました。Composeのコード
“`kotlin
NavigationBarItem(
selected = selected,
onClick = {
…
},
icon = {
Icon(
imageVector = tab.icon,
contentDescription = “Hoge”,
)
},
)
“`テスト
“`kotlin
composeTestRule
.onNodeWithContentDescription(“Hoge”)
.performClick()
“`エラー
“`
java.lang.AssertionError: Failed to inject touch input.
Reason: Expected exactly ‘1’
Ionic/Angular/SQLiteとcordova(Android)
AndoroidモバイルアプリでSQLiteにデータを格納したく、サンプルアプリを作ってみました。
他のWebサイトでも多くの先輩方が掲載をしてくださっていましたので参考にさせていただきました。
今回は、今現在最新のバージョンでサンプルアプリを作成してみました。
ソースコードはGithubに公開していますのでなにかの参考にしていただければ幸いです。## ライブラリのバージョン
* ionic/angular Version 7
* Angular version 16
* Ionic version 7
* cordova plugin SQLite database version 6.4
* cordova SQLite Porter version 6.4:::note
動作確認はAndroidのエミュレータを使用します。
:::## 主な機能
* アプリ起動時のデータベースファイルの作成(サンプルレコードのINSERT)
* Person情報の登録、更新、削除## UI/画面構成
* Person一覧画面
![image.png](https://qiita-i
IO処理を待ってから画面遷移する方法
# はじめに
画面遷移をする際に事前にサーバにリクエストしてから遷移したいときってありますよね。
単純にIO処理を待ってから画面遷移をするだけでできると思ったのですが、そう簡単にはいかなかったので解決策をまとめておきます。# 環境
2023年7月時点で以下の環境で実施しています。
“`gradle:build.gradle.kts(プロジェクトルート)
plugins {
id(“com.android.application”).version(“8.0.2”).apply(false)
id(“com.android.library”).version(“8.0.2”).apply(false)
id(“org.jetbrains.kotlin.android”).version(“1.7.20”).apply(false)
id(“com.google.dagger.hilt.android”).version(“2.44”).apply(false)
}
“`
“`gradle:build.gradle.kts(モジュール)
depen
Android14の重要そうな差分まとめ
# はじめに
Android13が出てきたのがつい先日のように感じますが、もうAndroid14がでようとしていますね。
個人的にはAndroid13もそれなりに修正が必要な差分があり大変な印象がありましたが、14ではどうでしょうか?
先んじて重要そうな差分を備忘録的にまとめておこうと思います。# 正確なアラームのスケジュール設定がデフォルトで拒否される
> Android 13 以降をターゲットとする新しくインストールされたアプリのほとんどで、SCHEDULE_EXACT_ALARM 権限が自動的に付与されなくなりました(権限はデフォルトで拒否されます)。
https://developer.android.com/about/versions/14/changes/schedule-exact-alarms?hl=ja
とのことです。
アラームって最近使うことないですが、使用されているプロジェクトで自動付与の恩恵を受けているプロジェクトは上記権限要確認ですね。
ただし、 OnAlarmListenerを使用して通知を受けている場合は上記権限は必須でないようです。# フ
JetpackComposeでFirebaseAuth(パスワード認証)
# JetpackComposeでFirebaseAuth(パスワード認証)
FirebaseAuthのパスワード認証をJetpackComposeで実装したいと思います。
The Firebase Blogの「[Adding Firebase Authentication to a Jetpack Compose app](https://firebase.blog/posts/2022/05/adding-firebase-auth-to-jetpack-compose-app)」を参考にしたのですが…いかんせんわかりづらいですね…
もう少しかみ砕いた感じで実装していきます。## 関連記事
– [JetpackComposeでFirebaseAuth(GoogleOneTap認証)](https://qiita.com/jozuko_dev/items/706fc6c89e6982bfd7e2)
– [JetpackComposeでFirebaseAuth(Google認証)](https://qiita.com/jozuko_dev/items/db904cfa28c
SkyWay Android SDK クイックスタートが残念な件
SkyWay Android SDKを使ってみました。
まずは[SkyWay Android SDK クイックスタート](https://skyway.ntt.com/ja/docs/user-guide/android-sdk/quickstart/)に従って、小さい実装を組みましたが、クイックスタートの内容が残念だったで記します。
まず
![スクリーンショット 2023-07-21 13.33.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/103548/ecec0720-746e-3381-1f88-06da572a1f72.png)
とありますが、これは不要です。
使っているのはAndroid Studio Flamingoですが
“`
buildFeatures {
compose true
}
“`
のままで良いです。
このオプションはJetpack Composeを使うかどうかのオプションですが、そもそもJetpack Compose と la