#android #kotlin #dagger-hilt
#Android #kotlin #dagger-рукоять
Вопрос:
Я использую Googles mlkit для сканирования штрих-кодов. Я включил некоторые из их примеров файлов. Я хотел бы внедрить BarcodeScannerProcessor ниже, используя Hilt, вместо создания встроенного экземпляра.
Я попытался пометить его как @ActivityScoped
и ввести @ActivityContext context: Context
в его конструктор, который, насколько я знаю, должен быть эквивалентен встроенному экземпляру ниже. Однако, когда я делаю это и добавляю его в действие ниже, я просто получаю черное окно сканера. Как я могу предоставить BarcodeScannerProcessor
с помощью Hilt?
class ScannerActivity : AppCompatActivity(){
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_vision_live_preview)
// some rows omitted for brevity
val processor = BarcodeScannerProcessor(this)
cameraSource!!.setMachineLearningFrameProcessor(processor)
}
}
Моя попытка изменить BarcodeScannerProcessor:
@ActivityScoped
class BarcodeScannerProcessor @Inject constructor(@ActivityContext context: Context)
: VisionProcessorBase<List<Barcode>>(context) {
//....
Вводится в ScannerActivity с помощью:
@Inject lateinit var barcodeScannerProcessor: BarcodeScannerProcessor
Комментарии:
1. Не могли бы вы предоставить класс с модулем
@Provides
? Или я неправильно понимаю вопрос? Кроме того, не могли бы вы добавить свой подход?2. @Andrew Вы имеете в виду перенос создания в другой модуль, который предоставляет экземпляр BarcodeScannerProcessor с использованием
@Provides
? Я тоже думал об этом, но мне кажется, что это ненужный дополнительный шаг, когда у меня есть контроль над классом? Я обновил вопрос своей попыткой3. Нет, вы все сделали правильно, но я думаю
processor = BarcodeScannerProcessor(this)
, что это неправильно. Вы уже внедрили свой barcodeScannerProcessor в свой activty. Просто позвонитеcameraSource!!.setMachineLearningFrameProcessor(barcodeScannerProcessor)
4. @Andrew Да, я это сделал, и именно тогда я получаю черное окно сканера. Верхний фрагмент — единственный способ заставить его работать, извините, если это неясно.
5. Я думаю, это как-то связано с.
@ActivityScoped
Что происходит, когда вы его удаляете?