- 1. HiltViewModelでAbstractなViewModelをInjectしてみるチャレンジ
- 2. Dagger 2.31のAssisted Inject
- 3. ハッカソンでOSMを使いたかったので、別の投稿を参考にOSMDroidとMapQuestを使ってみた話
- 4. AAC の ViewModel で View のライフサイクルとリンクさせる時は Lifecycle.Event をフックするといいよね、と言う話
- 5. AndroidTV9にadbでapkインストールし開くメモ
- 6. ピンあてゲーム「Hit and Blow」をFlutterでリリースした話【個人開発】
- 7. 【Android】AndroidセンサーAPIの種類
- 8. Flutter で仕事したい人のための Widget ツリー入門
- 9. 【Android】Code Reformatに関するメモ
- 10. Android初学者 adbコマンドでターミナルから操作してみた
- 11. Windows10 adbコマンドを実行できるようにする
- 12. kotlinx-coroutines-testのrunBlockingTestについて
- 13. 【Android】Android Studioで使えるショートカット(Windows)
- 14. ViewのonDrawでいくつかアークの円を描く
- 15. 【Android】【初心者】Custom Viewの作り方
- 16. Dagger Hiltで @Singleton を使うときの @InstallIn は ApplicationComponent
- 17. 【自分用メモ】Firestore、前と1個もコード変わってないのになぜかアプリが動かない時
- 18. AlertDialogで自作Layoutを使う(+ DataBindingも)
- 19. [Android/Kotlin]Gitに保存しないデータを扱う
- 20. 【Android】CLEARTEXT communication to xxxxxx.com not permittedが出た時
HiltViewModelでAbstractなViewModelをInjectしてみるチャレンジ
ちょっとHiltViewModelで何ができて何ができないのかわからないので調べてみましょう。
HiltViewModelは基本的にはこういう感じで利用できます。
“`kotlin
val viewModelHilt: VideoPlayerHiltViewModel by viewModels()
“`“`kotlin
@HiltViewModel
class VideoPlayerHiltViewModel @Inject constructor(val videoPlayer: VideoPlayer) : ViewModel() {
}
“`https://github.com/takahirom/hilt-sample-app のComponent図です。(arunkumar9t2/scabbardによる生成 )どうやらActivityRetainedComponentの下にViewModelのComponentがいるようですね。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazo
Dagger 2.31のAssisted Inject
例えば、動画を再生しているアプリで、このVideoのIDの動画を再生したい!みたいなときにViewModelにidを渡したくなったりしますよね?そしてそのViewModelに**Repositoryとかのインスタンスをinjectしつつ、videoIdを渡してvideoIdがNullableであるとかlateinitであるとかを意識せずに簡単に使えるようにしたい**ですよね。これができるのがAssited Injectです。
これを使うとコンストラクタに自分で指定した引数を追加することができるのでNullableやlateinitにせずに引数を追加できます。
この用途に、これまでsquare/AssistedInjectを使っていましたが、Dagger 2.31でこの機能が追加されました。# コード
基本的にinterfaceでFactoryを作ってそれに`@AssistedFactory`をつけて、そこに渡したい引数を追加したメソッドを追加し、作りたいクラスのコンストラクタに`@AssistedInject`をつけて、カスタマイズしたい引数に`@Assisted`をつけるだけで
ハッカソンでOSMを使いたかったので、別の投稿を参考にOSMDroidとMapQuestを使ってみた話
ハッカソンで、OSMつかって経路出したいねーなんてメンバーと話をしていて、その為にちょっとやってみたのでメモついでにまとめておく。
#参考にした記事
– [Androidで道案内アプリケーションを作る](https://qiita.com/ryein/items/a6a13420f5aadd62978d)
– [HowToInclude](https://github.com/MKergall/osmbonuspack/wiki/HowToInclude)参考にした [Androidで道案内アプリケーションを作る](https://qiita.com/ryein/items/a6a13420f5aadd62978d) はJavaだったので、Kotlinで書きながら実装してみた。
実際の実装は参照元を参考してもらうとして、実際にこの記事でつまづいたことなどを補足していきます。
参考にした記事を投稿してくれた方には感謝!#[Androidで道案内アプリケーションを作る](https://qiita.com/ryein/items/a6a13420f5aadd62978d)の補足
AAC の ViewModel で View のライフサイクルとリンクさせる時は Lifecycle.Event をフックするといいよね、と言う話
タイトルがここで言いたい事の全てです:innocent:
Android における ViewModel 側で onCreate 等のライフサイクルが走った時に何かしたい、みたいなシーンは結構あると思います。
(例えばユーザ情報を fetch する、とか)そういった時どうやって ViewModel 側にイベントを通知するかと言うと
“`SampleActivity.kt
class SampleActivity: AppCompatActivity() {
private val viewModel: SampleViewModel by viewModels()override fun onCreate(savedInstanceState: Bundle) {
super.onCreate(savedInstanceState)
viewModel.onCreate()
}
}
“`“`SampleViewModel.kt
class SampleViewModel: ViewModel() {
f
AndroidTV9にadbでapkインストールし開くメモ
#はじめに
某中国電機メーカーのスティックAndroidTV買った。
自分はお初AndroidTVでは無いが、最近のAndroidTVに野良apkをadbで入れても自動的にAndroidTV HOME Launcherに登録はされないことを思い出した。
検索しても日本語の記事が無かったようなので、今更ではあるがそれの開き方のメモである。#adbでアプリインストール
分からない場合はここを参照。
https://developer.android.com/studio/command-line/adb?hl=ja※AndroidTVは基本的にUSBでadb接続できない機種が多い。そのためTCP/IPで接続を行う。
**インストールしてもadbからの指示で起動はできるが、Launcher自体に登録されない。**
#開き方
今回はその某中国電機メーカーのスティックAndroidTVでやっていく。
サンプルとして今回はCPU-Zを開いてみる。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.c
ピンあてゲーム「Hit and Blow」をFlutterでリリースした話【個人開発】
## 概要
* アプリの説明
* 作ろうと思ったきっかけ
* Hit and Blowってどんなゲーム?
* Flutterでどう実現するか
* リリース準備について!
* 現状・今後実現していきたいこと、意気込み
* 最後にはじめまして[tomo](https://twitter.com/tomoDev_)と申します。
インターン生として大阪のスタートアップでエンジニアをしながら個人開発をしている大学生です。
Qiita初投稿になります!
自分と同じようにアプリを作る方またこれからアプリを作りたいと思っている方に向けて何かのヒントになれば嬉しいです!## リリースしたアプリについて
[Hit and Blow(ヒット&ブロー)](https://play.google.com/store/apps/details?id=com.tomoyaNakano.HitandBlow)
というピンの色を推測するゲームです。シングルプレーヤーゲームでアプリ自体は3ヶ月ほど前にリリースしました。
Nintendo Switchの世界のアソビ大全51というゲームに搭載されてい
【Android】AndroidセンサーAPIの種類
#プログラミング勉強日記
2021年1月18日
Android端末には様々なセンサーが搭載されている。具体的には温度や方位、方角、明るさ、傾き、加速度センサーなどがある。そういったセンサーを使うために必要なセンサーAPIについてまとめる。#AndroidのセンサーAPI
Androidでは、センサーによって変換された電気信号を取得するためのセンサーAPIが提供されている。このAPIによってセンサーを用いたアプリを簡単に開発できる。
android.hardwareパッケージには、SensorManager、Sensor、SensorEvent、SensorEventListenerの4つのセンサーAPIが提供されている。##SensorManager
センサーにアクセスするためのクラス。各センサーのイベントリスナーの登録や解除、センサーの情報の取得を行う。“`java:SensorManagerクラスのメソッド
// イベントリスナーを登録するメソッド
registerListener(SensorEventListener listener, Sen
Flutter で仕事したい人のための Widget ツリー入門
ご存知の通り、 Flutter は Widget を入れ子の構造で記述することで UI を構築します。
“`dart
Center(
child: Column(
children: const[
Text(‘Hello, Flutter!’),
SizedBox(height: 16),
Text(‘This is my first app.’),
],
),
),
“`Flutter の Widget 同士の関係は、このようなソースコードの形状から「入れ子」の構造をイメージしがちですが、 Flutter の仕組みを理解する上では、このソースコードから Widget の __ツリー構造__ がイメージできるようになっておくと何かと役に立ちます。
この記事では、Flutter の仕組みを説明する上でよく使われる __「Widget ツリー」__ について、初学者向けに基本から解説していきたいと思います。
# なぜ Widget ツリーを理解するのか
例えば「中央寄せしたければ `Center`
【Android】Code Reformatに関するメモ
# XML
– タグの一番初めの行を改行していてもReformatされないようにする:
Code Style→XML→Other→Keep line breaksにチェックを付ける– スラッシュの手前にスペースを入れない:
Code Style→XML→Other→In empty tagのチェックを外す![スクリーンショット 2021-01-18 15.33.09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/694762/3dc51e78-cdae-4fe6-b8c1-fcc19397bf82.png)
# Kotlin
– コメントの前の行を勝手に改行させない:
Code Style→Kotlin→Blank Lines→Before declaration with comment or annoationを0にする![スクリーンショット 2021-01-18 15.41.49.png](https://qiita-image-store.s3.ap
Android初学者 adbコマンドでターミナルから操作してみた
adbコマンドを使ってターミナルからAndroid端末を操作してみた。
## インテント直で投げる
`adb shell am start -n パッケージ名/アクティビティクラス`“`java
adb shell am start -n com.example.bookmanager_android/.MainActivity
“`上記を叩くと端末を触らなくてもbookmanagerアプリのMainActivityが開く。
`Security exception: Permission Denial`が出た場合
AndroidManifestファイルの開きたいアクティビティ部分に`android:exported=”true”`を追加する。## 端末にまかせる
`adb shell am start -a アクション -d URL`“`java
adb shell am start -a android.intent.action.VIEW -d http://www.google.com/
“`
上記を叩くと端末を触らなくてもgoogleサイトが開く。
Windows10 adbコマンドを実行できるようにする
# 目的
– Windows10のPCでadbコマンドを実行できるようにする方法をまとめる
# 方法
1. 下記にアクセスする。
– [https://developer.android.com/studio/index.html](https://developer.android.com/studio/index.html)
1. 「DOWNLOAD ANDROID STUDIO」をクリックする。![キャプチャ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/587d653b-e402-60dc-b1a0-c8dd73e220f0.png)
1. 利用規約に目を通し同意するなら「上記の利用規約を呼んだうえで利用規約に同意します。」にチェックを入れ「ダウンロードする」をクリックする。
![キャプチャ (1).PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/306417/f
kotlinx-coroutines-testのrunBlockingTestについて
前回に引き続きCoroutinesの単体テストの話です。
[https://iwsksky.hatenablog.com/entry/2020/12/09/014603:title]
今回はrunBlockingTest[1]について取り扱いたいと思います。
⚠理解が曖昧な状態で記述している可能性があります、間違いがあれば訂正お願いします。
## 環境
implementation “org.jetbrains.kotlin:kotlin-stdlib:1.4.20”testImplementation “org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.9”
## runBlockingTestとは
kotlinx-coroutines-testに含まれるAPIでrunBlocking同様に現在のスレッドをブロックしてコルーチンを起動することが可能。“`kotlin
@ExperimentalTime
@Test
fun exampleTest() = runBlocking {
val deferred =
【Android】Android Studioで使えるショートカット(Windows)
#プログラミング勉強日記
2021年1月17日
基本的なショートカットしか使っていなかったけど、使って便利だと思ったショートカットをまとめる。#個人的に覚えておきたいショートカット
| 説明 | ショートカットキー |
|:–:|:–:|
| クラス、ファイルなどを全体から検索 | shift +shift |
| タブの移動 | Alt + → / Alt + ← |
| 戻る | Ctrl + Alt + ← |
| 進む | Ctrl + Alt + → |
| 1行削除 | Ctrl + Y |
| アプリをビルドして実行 | shift + F10 |
| 行またはブロックのエラーの修正方法を表示 | Alt + Enter |
| 名前の変更 | shift + F6 |
| プロジェクトのクイック修正 | Alt + Enter |
| 置換 | Ctrl + R |#参考文献
[キーボード ショートカット](https://developer.android.com/studio/intro/keyboard-shortcuts?hl=ja)
ViewのonDrawでいくつかアークの円を描く
onDraw()を通じて、いくつかアークの円を一緒に描きましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906922/b6fabf94-e29c-af54-349b-b3371cd9d2cd.png)
###Viewのサブクラスを作る“`
class MyPieView(context: Context?, attrs: AttributeSet?):
View(context,attrs){override fun onDraw(canvas: Canvas?) {
super.onDraw(canvas)
}
}
“`
###Viewを作る時、普段はdpを使います。
KotlinのExtension Functions/Propertiesでpx→dpに切替“`
val Float.px
get()=TypedValue.applyDimension(
TypedValue.COMPLE
【Android】【初心者】Custom Viewの作り方
#【Android】【初心者】Custom Viewの作り方
## 概要
オセロのアプリを作ってみようという思いで、オセロの初期状態のレイアウトを独自Viewで、作ってみたので、Custom Viewの作りかたのまとめという感じです。
大した内容ではないです、すみません。
基本的には、Android Developerの[カスタムビュー コンポーネント](https://developer.android.com/guide/topics/ui/custom-components)の項目を参照して作成しました。## 作成したレイアウト
## 作成手順
大まかな手順としては、以下の3つでした。
1. Viewを継承した独自Viewのクラスを作成
2. XMLから作成したViewを取得できるように、
Dagger Hiltで @Singleton を使うときの @InstallIn は ApplicationComponent
### 一行で言うと
`@Singleton` は `@InstallIn` が `ApplicationComponent` じゃないと使えません。### 事象
`@InstallIn` が `ApplicationComponent` の Module で `@Singleton` すると、以下のビルドエラーとなる。
“`
error: [Dagger/IncompatiblyScopedBindings] com.example.XXXApplication_HiltComponents.ActivityC scoped with @dagger.hilt.android.scopes.ActivityScoped may not reference bindings with different scopes: public abstract static class SingletonC implements XXXApplication_GeneratedInjector
“`[Hilt を使用した依存関係の注入 \| Android デベロッパー \
【自分用メモ】Firestore、前と1個もコード変わってないのになぜかアプリが動かない時
#久々にアプリをビルドすると何故か動かん
前とコード変わってないのに。Firebase周りで日付が関連する部分はここ。
Firestore > ルールの部分↓“`
rules_version = ‘2’;
service cloud.firestore {
match /databases/{database}/documents {
match /{document=**} {
allow read, write: if
request.time < timestamp.date(2021, 12, 1); } } } ``` `timestamp.date()`の中の日付が過去の日付になっている時、アプリがビルドできなくなります。 #対処法 とりあえず未来の日付に打ち直す。直接いじっていいです。 # おまけ こんなところで躓くこともあるのかぁと思いました。忘れちゃいそうなので一応メモ。 これで上手くいかない場合はSHA1を登録し直すとかしてみよう。
AlertDialogで自作Layoutを使う(+ DataBindingも)
Dialog + 自作LayoutだとsetPositiveButtonとかできなくて、ボタンをLayoutに準備してfindViewByIdとかするのが面倒…
AlertDialogならsetPositiveButtonとかできるので、自作Layoutファイルを使って、ダイアログの表示部分だけ自作Layoutにしたかったので、調べたものの備忘録的にまとめました。
AlertDialogに自作Layoutを利用するのと、DataBindingも使いたかったので、それも調べてまとめました。DataBinding使わない場合は不必要な箇所はすっ飛ばしてください。
## ■ まず完成形
AlertDialogに自作レイアウトファイル(今回はTextView2つ)を差し込めるようにします。
名前だよ、の方はViewModel経由で取得するようにDataBindingしています。![Screenshot_1610806707.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/503267/beac35c
[Android/Kotlin]Gitに保存しないデータを扱う
# なんでそんなことするの?
github等でgitを共有する時に、データベース接続用パスワード等はしたくない# 説明
.gitignoreファイルに記載されているファイルはgitに保存されなくなる
AndroidStudioでプロジェクトを作成すると、自動的に.gitignoreとlocal.propertiesが作成され、
.gitignoreの中にlocal.propertiesも入っているのでそれをそのまま使用する# 結論
[github](https://github.com/yuki-kamikita/LocalPropertiesSample)
この中にlocal.propertiesは入っていない# コード
## .gitignore
local.propertiesが入っていることを確認“`:.gitignore
/local.properties
local.properties
“`## build.gradle(:app)
ここのやり方はわからなかったら`buildConfigField`でググってください“`build.gradl
【Android】CLEARTEXT communication to xxxxxx.com not permittedが出た時
APIをRetrofitを使い取得しようとしたときにエラーになったのでメモ
>CLEARTEXT communication to xxxxxxx.com not permitted by network security policy
http通信が許可されていないことからこのエラーになる。
## Manifestにandroid:usesCleartextTraffic=”true”を足す
“`xml