アプリ自体は、使いやすい。
必要なものを用意すれば、タッチのみですぐに発行される。
分かりづらいのはダウンロード先で、ストア内を「新型コロナワクチン接種証明書」 と検索で見つけれなかった。なんでや。
👉 「新型コロナワクチン接種証明書アプリ」をApp Storeで
👉 新型コロナワクチン接種証明書アプリ - Google Play のアプリ
または、デジタル庁のWebサイトに、Android、iPhone ダウンロード先のリンクやQRコードがあるのでそこからどうぞ。
アプリ自体は、使いやすい。
必要なものを用意すれば、タッチのみですぐに発行される。
分かりづらいのはダウンロード先で、ストア内を「新型コロナワクチン接種証明書」 と検索で見つけれなかった。なんでや。
👉 「新型コロナワクチン接種証明書アプリ」をApp Storeで
👉 新型コロナワクチン接種証明書アプリ - Google Play のアプリ
または、デジタル庁のWebサイトに、Android、iPhone ダウンロード先のリンクやQRコードがあるのでそこからどうぞ。
最近、やっと更新されて日本語でも高精度な文字起こしができるようになりました。
レコーダーで、録音した音声を検索できます。会議、講義、バンド練習、家族の思い出など、なんでも録音して保存し、後で再生できます。レコーダーで、録音した音声の文字起こしとラベル付けが自動的に行われるため、大事な情報を簡単に見つけることができます。
「語句の編集」から聞き直しながら意図する語句に編集できます。
また、録音した音声の前後の不要部分を書き起こし文字を見ながら「切り抜く」ことも可能です。
以下の形式で共有することができます。
- 音声 (.m4a ファイル)
- 文字起こし (.gdoc .txt ファイル)
- 動画クリップ (.mp4 ファイル)
私がよく使うのは、テキスト編集画面から「全選択」でクリップボードへコピーしてからの好きなエディタに貼り付けです。
iPhoneやパソコンからもブラウザ経由で録音、文字起こししたアーカイブを確認できます。
以上です。よろしくおねがいします。
シンプルなものにして整理、定型化しておきたい。
「どこに」←「どれを」インジェクトしてるか、とそれの記述をパターン化。
MVVM でいうところの View であるこれらに、ViewModel をインジェクトする場合。
コンストラクタからインジェクトできないいわゆる「Androidクラス」。
以下のものがこれに当てはまる。
- Activity
- Fragment
- View
- Service
- BroadcastReceiver
それぞれのクラスに付ける2つのアノテーションと ktx による記述でプロパティにインジェクトする。
@AndroidEntryPoint
class MainFragment : Fragment() {
private val viewModel: MainViewModel by viewModels()
@HiltViewModel
class MainViewModel @Inject constructor(
repository: MainRepository
) : ViewModel() {
Module を使った ViewModel コンストラクタへのインジェクト。
インターフェースの型でリンクする。
@HiltViewModel
class MainViewModel @Inject constructor(
repository: MainRepository
) : ViewModel() {
Hilt 備え付けの Component でライフサイクルを考慮して、実装型でインジェクトする。
abstract、@Binds は、インターフェースを介す場合の、 @InstallIn( ViewModelComponent::class)、 @ViewModelScoped は、 ViewModel に対してのインジェクトのパターン。
@Module
@InstallIn(ViewModelComponent::class)
abstract class RepositoryModule {
@Binds
@ViewModelScoped
abstract fun bindRepository(impl: DefaultRepository): MainRepository
}
Androidクラスのようなプロパティへのインジェクトとは違う @Module、@Provides を使ったコンストラクタインジェクトの Hilt基本的パターン。
SingletonComponent は、旧 ApplcationComponent で生存期間最長。
class DefaultRepository @Inject constructor(
private val localDao: LocalDao,
private val contentResolver: ContentResolver,
private val sharedPreferences: SharedPreferences
) : MainRepository {
@Module
@InstallIn(SingletonComponent::class)
object DataSourceModule {
@Provides
@Singleton
fun provideLocalDao(
@ApplicationContext context: Context
): LocalDao {
return LocalDao(context)
}
Context は、 @ApplicationContext と @ActivityContext がすでに用意されているので区別しながらアノテーション1つのみで注入できる。これ便利。
@Module
@InstallIn(SingletonComponent::class)
object DataSourceModule {
@Provides
@Singleton
fun provideLocalDao(
@ApplicationContext context: Context
): LocalDao {
return LocalDao(context)
}
しかし、どの位置でも自在にインジェクトしようとするとコケる。
[Dagger/MissingBinding] @dagger.hilt.android.qualifiers.ActivityContext android.content.Context cannot be provided without an @Provides-annotated method.
@Module 直下の @Provides メソッドの引数で使うものですか。
buildscript {
ext.versions = [
"hilt" : "2.41",
]
dependencies {
classpath "com.google.dagger:hilt-android-gradle-plugin:${versions.hilt}"
}
}
apply plugin: "org.jetbrains.kotlin.kapt"
apply plugin: "dagger.hilt.android.plugin"
dependencies {
implementation "com.google.dagger:hilt-android:${versions.hilt}"
kapt "com.google.dagger:hilt-android-compiler:${versions.hilt}"
androidTestImplementation "com.google.dagger:hilt-android-testing:${versions.hilt}"
kaptAndroidTest "com.google.dagger:hilt-compiler:${versions.hilt}"
testImplementation "com.google.dagger:hilt-android-testing:${versions.hilt}"
kaptTest "com.google.dagger:hilt-compiler:${versions.hilt}"
}
多少の流儀はあるけど、 Component 記述がなくなっただけでも記述量は大幅に削減できます。
alpha らしく、まだコンポーネント名など変わるんかもしれんが、ここも適宜修正させてもらいます。
👉 【MVVM】 Kotlin Flow で使える5つの利用パターン
👉 skydoves/Pokedex: 🗡️ Android Pokedex using Hilt, Motion, Coroutines, Flow, Jetpack (Room, ViewModel) based on MVVM architecture.
👉 Hilt and Dagger annotations cheat sheet - Android Developers - Medium
【Retorofit】コピペで使える NetworkModule【Dagger Hilt】
👉 https://t.co/zf9cpgxPEG #kotlin #android #プログラミング— chanzmao (@maochanz) March 17, 2022