- 1. 20230729_自主学習MVVM_データレイヤ勉強編_DI完敗
- 2. FlutterでGoogle Driveにファイルをアップロードして参照する
- 3. android:enableOnBackInvokedCallback=”true”にしたときのバックキーのKeyEventの変化
- 4. 20230728_自主学習MVVM_データレイヤを勉強せねば
- 5. JetpackComposeでFirebaseAuth(メールリンク認証)
- 6. ガチで本物のAviUtlをスマホで使う方法(当然重い)
- 7. AndroidのJUnitテストは超ムズい(4)
- 8. JetpackComposeでFirebaseAuth(Google認証)
- 9. Flutter?audioplayers を使ったのに ios, android 端末で音が鳴らない、小さい時の対処法
- 10. 【Android】FireBase DynamicLinks経由でアプリインストールしたらストアに「開く」ボタンが出ない
- 11. Android EspressoでクイズアプリのUIテストを導入してみた (Windows)
- 12. 【Android】GoogleMapの専用UIの位置を変える【Kotlin】
- 13. JetpackComposeでFirebaseAuth(GoogleOneTap認証)
- 14. jetpack composeで遷移先から遷移元にデータを返す
- 15. Androidで読み取り専用のNFCタグを作成する
- 16. 小ネタ:リモートワークに役立つ Android Studio の機能(端末の画面共有)
- 17. 【Android/Java】外部アプリ起動(Android11)
- 18. [Android]Android14(APIレベル34)の影響範囲と実装コードの対応について
- 19. [`Process 〜 has died`] アプリが頻繁にクラッシュする Android 端末の相談対応に logcat を使って調査/改善した
- 20. 【Android】一定時間毎に何かをする処理【Kotlin】
20230729_自主学習MVVM_データレイヤ勉強編_DI完敗
## やったこと
* 公式のデータレイヤの研修
https://developer.android.com/courses/pathways/android-basics-compose-unit-5-pathway-2?hl=ja## わかったこと
* データリソースの勉強も必要
* DIの箇所の理解不足
丁寧に勉強せねば。## わからないこと
* サンプルアプリの画面レイアウトとしての、xmlファイルで存在しない。(別のやり方があるんだろう・・・)
=> いろいろ調べているとこれであると推測。ChatGPTにも聞いてみました。ChatGPT君が言うには・・・
>Jetpack Composeファイル:もしリポジトリがJetpack Composeを使用している場合、Jetpack Composeファイルが含まれている可能性があります。Jetpack Composeでは、UIコンポーネントがKotlinコードで直接記述されるため、XMLレイアウトファイルを使用しないことがあります。## これからやること
完了まで行えていないので、続きやってみよう~。## 偉大
FlutterでGoogle Driveにファイルをアップロードして参照する
# はじめに
ちょっとGoogleドライブにファイルをアップロードして参照したくなりました。
昔、Javaでやったときに面倒だった記憶がありますが、Flutterでも面倒そうなので、ちゃんとやったことを残しておきたいので記事にします。バージョン関係は以下の通り
“`console
> Flutter –version
Flutter 3.10.5 • channel stable • https://github.com/flutter/flutter.git
Framework • revision 796c8ef792 (6 weeks ago) • 2023-06-13 15:51:02 -0700
Engine • revision 45f6e00911
Tools • Dart 3.0.5 • DevTools 2.23.1
“`現時点ではAndroidのみの話になります。
また、お試し実装なのでエラーチェック等かなり甘いのでご注意を。# ゴール
ログインして、Google Driveにファイルをアップロードしてそのあとダウンロードする。
# 準備
android:enableOnBackInvokedCallback=”true”にしたときのバックキーのKeyEventの変化
予測型「戻る」ジェスチャーをオプトインしていますか?
オプトインした場合のDialogでのバックキー検出の問題に遭遇しました。
https://developer.android.com/guide/navigation/predictive-back-gesture?hl=ja
予測型「戻る」ジェスチャーをオプトインするには、 `AndroidManifest.xml` の `
` タグ内で、 `android:enableOnBackInvokedCallback` フラグを `true` に設定します。 “`AndroidManifest.xml
…
“`# AppCompatActivityでの変化
このとき、
> 注: OnBackPressedCallback は、android:enableOnBackInvokedCallback の値に関
20230728_自主学習MVVM_データレイヤを勉強せねば
## やったこと
* 情報収集(ネットサーフィン)## わかったこと
* 自分が終了した研修は、UIレイヤだけだったこと
* まだデータレイヤにおいては、ノータッチであること
* データレイヤは、MVVMのModelのことであり、RepositoryとDataSourceで成り立っていること
* Android開発で推奨されるアーキテクチャは、厳密にはMVVMではないという意見があること(公式は近いとしてる。)
* 変数の監視には、オブザーブとxmlからバインドする奴はどっちでもいいということ
(UIレイヤの話ですが)## わからないこと
* データレイヤの世界## これからやること
公式のデータレイヤの研修をやろうかな
https://developer.android.com/courses/pathways/android-basics-compose-unit-5-pathway-2?hl=ja## 偉大なる参考様
いつもありがとうございます。https://zenn.dev/nemototea/articles/d7fe9b095e3487
https:
JetpackComposeでFirebaseAuth(メールリンク認証)
# JetpackComposeでFirebaseAuth(メールリンク認証)
FirebaseAuthのメールリンク認証を実装していきます。メールリンク認証とは、以下のフローで認証を行うものです。
1. ユーザーが、アプリでメールアドレスを入力する(パスワードはいらないです)
1. Firebaseが、認証情報をDeepLinkにしたDynamicLinksを載せたメールをそのメールアドレス宛に送信する
1. ユーザーが、DynamicLinksを開く(=タップする)
1. アプリが、メールアドレスとDynamic LinksのDeepLinkを使って、FirebaseAuthにSignInするメールアドレスの正当性だけでアカウントが作れる様なアプリの場合は使えそうですね。
(小ネタ)DynamicLinks
メールやSNS、Webサイトにあるリンクを押すと、連動するアプリが起動するよ。という機能です。
(小ネタ)DynamicLink
ガチで本物のAviUtlをスマホで使う方法(当然重い)
# 大 前 提
これはAndroid専用です。
iPhoneの方は諦めるか自力で頑張りましょう。俺は絶対やんない
# なんでそんなことしようと思ったのか
スマホ用の動画編集アプリって…なんかこう……使いにくくないですか?
数値を直接指定できなかったりするし、当然ウィンドウもない。それと、どうしてもマウスが欲しくなる。え?俺だけ??
# 注意事項
こまめにキャッシュを削除しても最終的に**マジで4GB消費します**。
ストレージと時間とネットに余裕がある時にやりましょう。# やり方
### Step 0
まずはTermuxをインストールしましょう。
GooglePlayでもリリースされていますが、GooglePlayの仕様変更のせいで更新停止しています。
なにか特殊な事情がない限りF-Droidからインストールしましょう。https://f-droid.org/ja/packages/com.termux/
それとお好きなVNCクライアントもインストールしておいてください。
個人的にはRealVNC Viewerが使いやすいです。https://play.go
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)
– [JetpackComposeでFirebaseAuth(メールリンク認証)](https://qiita.com/jozuko_dev/items/bf343ba3f2b37a018
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)
– [JetpackComposeでFirebaseAuth(メールリンク認証)](https://qiita.com/jozuko_dev/items/bf343ba3f2b37a0184be)## エンドポイント
### GoogleアカウントのOneTap
| エンドポイント | |
|:–|:–|
| SignInClient.beginSi
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/