如何在 Android Studio 中使用 Hilt 依赖注入 MediaRecorder?

How can I dependency injection MediaRecorder with Hilt in Android Studio?

我希望在 Android Studio 中使用 Hilt 进行依赖注入 MediaRecorder 对象。

但是代码 A 得到错误 'lateinit' modifier is not allowed on properties of nullable types .

并且代码 B 得到错误 Dagger 不支持注入私有字段

Code C可以编译,但不是我需要的。我需要将 mRecorder 定义为可空的,这样我就可以使用 mRecorder = null 来释放它。

如何修复代码 A?

代码A

@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
    @Inject lateinit var mRecorder: MediaRecorder?

}

@InstallIn(SingletonComponent::class)
@Module
object ObjectModule {
    @Provides
    @Singleton
    fun provideMediaRecorder(): MediaRecorder {
        return  MediaRecorder()
    }
}

代码B

@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
    @Inject var mRecorder: MediaRecorder? =null

}

...

代码C

@HiltViewModel
class SoundViewModel @Inject constructor(): ViewModel()
{
    @Inject  lateinit  var mRecorder: MediaRecorder

}

...

如果您没有对 component/injector 对象的引用,则无法进行 属性 注入。您可能希望将记录器添加为构造函数参数。

@HiltViewModel
class SoundViewModel @Inject constructor(private val recorder: MediaRecorder
): ViewModel()

或者,如果你真的想让你的记录器可以为空,你可以使用 Provider:

@HiltViewModel
class SoundViewModel @Inject constructor(private val recorderProvider: Provider<MediaRecorder>
): ViewModel(){

    private val recorder : MediaRecorder? = null

   init {
        recorder = recorderProvider.get() 
    }

}

要释放您的媒体记录器,请使用 mediaRecorder.release() 功能。