- 1. Dagger Hilt Constructor Injection
- 2. コルーチンとチャネル入門#9 コルーチンのテスト
- 3. Jetpack Compose で dp / px / sp の相互変換はどうやるのか
- 4. Nrealでの録画機能について
- 5. RecyclerViewのセルをKotlin Android ExtensionsからviewBindingに変更したい!!
- 6. Android Studio インストール
- 7. iPhoneのアプリはどうやってできるのか?
- 8. Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
- 9. Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
- 10. コルーチンとチャネル入門#8 チャネル
- 11. AlarmManagerの複数登録
- 12. 【Jetpack Compose】StateFlow でカウンターを作ってみる
- 13. ImageSpanで画像の高さを変えたい
- 14. 【備忘録】Geospatial API のサンプルを動かすまで
- 15. [Android] ActionBarのUpButtonを制御する
- 16. Kotlin 今どきよくある JSON リクエストからのパース
- 17. XMLのvariableパラメータでジェネリックな型を指定する方法
- 18. Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)
- 19. コルーチンとチャネル入門#7 進捗の表示
- 20. [Android] 簡単にSnackBarの背景色を変えてみる
Dagger Hilt Constructor Injection
# 最初に
Dagger Hiltの利用でField Injectionはスッと理解できたのですが、Constructor Injectionは少し時間がかかりました。自分用にもメモとして残します。
Dagger Hiltの環境設定やプロバイダのスコープ範囲などの説明はここでは割愛して、シンプルにコンストラクタインジェクションがどのように記述されるのかだけをまとめてます。# 多分一番シンプルなコード
わかりやすくするためにString型を提供するプロバイダのサンプルです。
“`Kotlin
@AndroidEntryPoint
class HiltStringActivity : AppCompatActivity() {// StringImplのコンストラクタには引数があるのに何も渡していない
// コンストラクタの引数はインジェクトしろというアノテーション
@Inject
lateinit var myStringImpl: StringImploverride fun onCreate(savedInstanceState:
コルーチンとチャネル入門#9 コルーチンのテスト
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/09_Testing)
コルーチンを使うコードのテスト方法について議論しよう。我々の解法をテストし、並列なコルーチンの解法が、`suspend`関数の解法よりも速く、チャネルの解法が、単純な”進捗”の解法よりも速いことが確認できればと思う。
それではGitHubサービスをモックし、このサービスが与えられたタイムアウトの後、結果を返すようにしよう。
“`
リポジトリ一覧要求 – 1000ms遅延以内で、答えを返す
repo-1 – 1000 ms 遅延
repo-2 – 1200 ms 遅延
repo-3 – 800 ms 遅延
“`
その後、`suspend`関数でのシーケンシャルな解法は、4000ms前後かかるはずである。
`4000 = 1000 + (1000 + 1200 + 800)`
そして並列の解法は、2200ms前後かかるはずである。
`2200 = 1000 + max(1
Jetpack Compose で dp / px / sp の相互変換はどうやるのか
“`kotlin
val pxValue = with(LocalDensity.current) { 16.dp.toPx() }// or
val pxValue = LocalDensity.current.run { 16.dp.toPx() }
“`
[How to convert Dp to pixels in Android Jetpack Compose? – Stack Overflow](https://stackoverflow.com/questions/65921799/how-to-convert-dp-to-pixels-in-android-jetpack-compose/65921800#65921800)Kotlin スコープ系の関数で取得できる、というのだが気持ちが悪いです。
これは、以下でも同じ。
“`kotlin
val pxValue = 16.dp.value * LocalDensity.current.density
“`さらに、その他、それぞれの変換もみてみます。
[?【Jetpack Compose】d
Nrealでの録画機能について
# 動作環境
– macOS version 12.3.1 Monterey Intel Core i9
– Unity 2020.3.8f1
– NRSDKForUnityAndroid_1.8.0.unitypackage
– NrealLight モデル:NR-9101GGL
– Xperia 5 Ⅱ SOG02SLA
# 元からある録画機能
NRSDKForUnityAndroid_1.8.0.unitypackageをUnityにインポートすると、Assets/NRSDK/Demosの中にRGBCamera-Recordが作られており、これをbuildするとNrealのカメラから動画が取れる。
アプリを実行すると、録画の設定に関するパネルが表示されるので好きな設定を選んで、赤い丸をコントローラーでクリックする。
Android Studio インストール
# はじめに
Android初心者の方向けの記事です。Android Studioインストールからエミュレータ起動までを書いています!
## Android Studio インストール
AndroidのDeveloperにてインストールできます。
こちらを参考にインストールをして下さい。30GBとかあるのでMacのスペックによりますが、長いと1時間ほどインストールに時間がかかるのでお茶でもしながら気長に待って下さい。
https://developer.android.com/studio/install?hl=ja#mac
## インストール後のトップ画面

### ① New Project
言葉の通り、プロジェクトを作成できます。「Finish」を押下でプロジェクトが
iPhoneのアプリはどうやってできるのか?
スマートフォンで日々使えるアプリたち。
これらは一体どうやって作られているのか、まとめました。## アプリとは?
アプリとは、「application software(アプリケーションソフトウェア)」の略で、目的にあった作業をする応用ソフトウェアのことです。
具体的には、スマホであれば、ゲームやメッセージアプリ、動画再生など
パソコンであれば。表計算やワープロなどこのアプリたちは、『OS(オペレーションシステム)』上にインストールして使用できるようになります。
#### OSとは?
OSとは私たちが使うすべてのコンピュータ(パソコン、スマホなど)を制御するのに必要な基本ソフトウェアのことです。簡単にいうと、パソコンやスマホを動かすためのソフトです。OSがないと電源を入れても何も表示されず、キーボードから文字も入力できなくなります。一般的なOSとしては、下記があります。
| パソコン | スマホ |
|:-:|:-:|
| Windows , MacOS , Linux , ChromeOS | iOS(iPhoneで使用)、Android|## iO
Droidkaigiの応募ネタが思いつかない人のためのトリガーリスト
# はじめに
Androidエンジニアのみなさん、こんにちは。
今年もDroidkaigiに応募したいけどネタが思いつかない @KentaHarada です。漠然とネタを考えていますが、なにも思いつきません :innocent:
まずはトリガーリストを作って脳を刺激するところから始めてみようと思います :rolling_eyes:# 1. 過去のセッションを振り返る
Droidkaigiでは初心者向けの内容からディープな内容まで幅広いセッションが開催されています。過去のセッションの内容を振り返って雰囲気を思い出してみます。全部みると大変なので 2019年からスタート!### 2019年
– [採択されたセッション](https://droidkaigi.jp/2019/accepted)
– [投稿されたセッション一覧](https://droidkaigi.jp/2019/proposals/)
– [Droidkaigi 2019 Day.1 (YouTube)](https://www.youtube.com/watch?v=4suIJHROcK0&list=P
Flutter の Android アプリでAPKファイルサイズが突然倍くらいになったが、実は問題なくてむしろ推奨された動作だった件
# 概要
* あるアプリで Flutterのバージョンを上げる対応をしたら、Android版として生成したAPKのファイルサイズが倍くらいに大きくなってしまった
* 色々調べると結構複雑な問題が絡んでおり、かつドキュメントが分散していて理解がしづらかった
* 今回APKのファイルサイズが大きくなったのはネイティブライブラリが非圧縮でアーカイブされていたことが原因だったが、これ自体は問題がなく、むしろ推奨動作であることがわかったなお、これは Flutterを使わない通常の Androidアプリにも適用される話です。
# 起こったこと
Flutterの バージョン1系を使っていたあるアプリをバージョン2系を使うようにしたところ、生成されたAPKのサイズが倍くらいになってしまいました。具体的には 100MBくらいだったものが 180MBくらいになったイメージです。
APKの生成は以下のような感じで行なっていて、この処理自体は特に変更していません。
“`
> flutter build apk –flavor production -t lib/main.dart –re
コルーチンとチャネル入門#8 チャネル
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/08_Channels)
共有の可変状態を含むコードを書くのは、とても難しくエラーを起こしやすいことが知られている。(このチュートリアルでさえ、コールバックを使用するソリューションを実装するかたわら、遭遇した) 共有の可変状態を使う情報の共有の代わりに、メッセージによる情報の共有により、これを簡単にしようとしている。コルーチンはチャネル経由でお互いにメッセージをやりとりすることができる。
チャネルは、異なるコルーチンの間でデータを渡すことを可能にする通信基本命令である。あるコルーチンはチャネルに対していくつかの情報を送ることができ、一方で他のコルーチンはチャネルからその情報を受け取ることができる。
この記事では、時間を指定した場合の実装になります。
# AlarmManagerをセット
“`kotlin
class SettingAlarmManager : Application(){
fun settingAlarmManager(
context: Context,
timeDiff: Long,
id: Int,
) {
val alarmManager = context.getSystemService
【Jetpack Compose】StateFlow でカウンターを作ってみる
Composable 入れ子の更新具合を確認します。
“`kotlin
@HiltViewModel
class SampleViewModel @Inject constructor() : ViewModel() {private val _count = MutableStateFlow(0)
val count = _count.asStateFlow()fun inc() {
_count.update { count -> count + 1 }
}}
“`
[? StateFlow の View への公開](https://android.benigumo.com/20210830/expose-stateflow/)“`kotlin
@Composable
fun SampleScreen(
viewModel: SampleViewModel = hiltViewModel()
) {val count: Int by viewModel.count.collectAsState()
Column(
ImageSpanで画像の高さを変えたい
# はじめに
今回は spanを使っていく中で 画像と行の高さが合わずに、違和感がある状態だったので
色々試した結果 どこを変えたかを記事にして残しておきます# ImageSpan
public ImageSpan(@NonNull Context context, @NonNull Bitmap bitmap, int verticalAlignment)
とある様に
ImageSpanでは必須の引数として Context と Bitmap を必ず設定する必要があります
**必須の引数二つのみ**を設定していると画像の高さは行の下辺と画像の下辺が同じ高さになるのが
デフォルトの様です# 解決法
画像の高さを変えるにの注目したのは 第三引数にある verticalAlignment でした
intであるので はじめは適当な数字を入力してみましたが、特に変化はありませんでした
そこで0から順に入力してみることにしました
0では初期値である 行の下辺と画像の下辺が同じ位置になりました(変化なし)
1にしたところ、画像の高さは 行の上辺と下辺の間、つまり真ん中の高さ
【備忘録】Geospatial API のサンプルを動かすまで
# ARCore Geospatial API 使うためのメモ
Geospatial APIを試したくてGoogle CloudやUnity 上で設定とサンプルをとりあえず動かすまでの手順の備忘録。
基本的には以下を参照した。https://developers.google.com/ar/develop/unity-arf/geospatial/developer-guide-android
## 環境
* Unity 2021.3.4f1
* ARCore Extensions 1.31.0
* ARCore XR Plugin 4.2.3
* XR Plugin Management 4.2.1サンプルはARCore ExtentionsのGeospatial Sampleを手元にあったAndroidでとりあえず試す。
## 手順
手順は基本的に上記のサイトベースで実施
1. [Google Cloud プロジェクトを設定する](https://developers.google.com/ar/develop/unity-arf/geospatial/deve
[Android] ActionBarのUpButtonを制御する
## はじめに
Navigationコンポーネントを使用している時の、画面上部のActionBarにあるUpButton(←ボタン)の制御方法について記載します。
Navigationの導入は省きます。公式ドキュメントはこちら:[Navigationコンポーネント](https://developer.android.com/guide/navigation?hl=ja)## Activityをfinishする
“`MainActivity.kt
override fun onOptionsItemSelected(item: MenuItem): Boolean {
when (item.itemId) {
android.R.id.home -> {
finish()
return true
}
}
return super.onOptionsItemSelected(item)
}
“`## 現在のFragmentによって処理を変える
“`MainActi
Kotlin 今どきよくある JSON リクエストからのパース
数年で一気に変わってます、JSONの取り扱い処理。
Gson も Moshi も不要です。
“`kotlin
@Provides
@Singleton
fun provideRetrofit(okHttpClient: OkHttpClient): Retrofit {
val contentType = “application/json”.toMediaType()
val json = Json {
ignoreUnknownKeys = true
isLenient = true
} // *
return Retrofit.Builder()
.client(okHttpClient)
.baseUrl(BASE_URL)
.addConverterFactory(json.asConverterFactory(contentType))
.build()
}
“`Kotlin 内蔵の serialization を使うのが良いでしょう。
[? Kotlin 今どきよくある JSON リクエ
XMLのvariableパラメータでジェネリックな型を指定する方法
# はじめに
XML上でジェネリックなパラメータを指定する実装を少し調べる機会がありましたので、議事録的に残しておこうと思います。# 指定方法
指定方法は以下です。“`
“`以上になります。
variableには特殊文字は使用できないので、記号部分は上記のように記載する必要があります。# さいごに
上記の実装頻度は高くはないものの、実装するとなると少し考えてしまう方もいるかもしれません。
その際にはこちらの実装をお役に立てていただけますと幸いです。
Jetpack Compose 勉強記録その3 (Jetpack Compose チュートリアル レッスン:4)
Jetpack Compose 勉強記録その3です。
# 今回の内容
https://developer.android.com/jetpack/compose/tutorial?hl=ja
チュートリアルの続きをやっていきます。
今回はレッスン 4:リストとアニメーションをやっていきます。
リストは必ず使うと言っても過言では無いので、気になります。
# メッセージのリストを作成する
“`MainActivity.kt
@Composable
fun MessageCard(messages: List) {
LazyColumn {
items(messages) { message ->
CardItem(message)
}
}
}
“`“LazyColumn“ “LazyRow“
こちらを使用する事でリストを表示する事が出来るみたいです。
“LazyColumn“は縦のリストです。“LazyRow“は横のリストです。
“items“に渡
コルーチンとチャネル入門#7 進捗の表示
ソース記事は[こちら](https://play.kotlinlang.org/hands-on/Introduction%20to%20Coroutines%20and%20Channels/07_Progress)
いくつかのリポジトリの情報はかなり早くロードされるにもかかわらず、ユーザーはすべてのデータが一旦ロードされると結果リストを見るだけである。それまでは、ロード中アイコンが進捗を表示するが、どのコントリビューターがすでにロードされているのかという、現在の状態についての情報がない。
中間の結果を早めに見せ、それぞれのリポジトリのデータをロードした後で、すべてのコントリビューターを表示することができるかもしれない。

この機能を実装するには、中間の状態について呼び出されるコールバックとして、UIを更新するロジックを渡す
[Android] 簡単にSnackBarの背景色を変えてみる
# 初めに
今回SnackBarの背景色を変更したい時に悩むことがあったのでここにメモとして残そうと思う。
# 動作の内容
“`kotlin
//MainActivity.ktval snackbar = Snackbar.make(findViewById(android.R.id.content),”タイトルが入力されていません。”, Snackbar.LENGTH_SHORT)
//R.color.errorはColor.xmlを参照する。
//詳しくは下記URLまで、
snackbar.view.setBackgroundResource(R.color.error)
snackbar.show()
“`##### Color.xmlについて
https://qii