Próbuję dodać fragment kamery za pomocą Camerax.But, gdy używam tego za pomocą ViewPager (TablaOut) Potrzebuję aparatu, aby zamknąć, gdy funkcja ONPUZY () Funkcja nazywana (jak gdy karta przełączania kamera powinna zamknąć). Ale z domyślnym cyklem cyklu fragmentu Zamyka się, gdy fragment zostaje zniszczony.

Dlatego próbowałem wykonać niestandardowy cykl życia (kod pokazany poniżej). Ale to nie działa, nawet nie otwiera się

class CustomLifecycle : LifecycleOwner {
    private val lifecycleRegistry: LifecycleRegistry = LifecycleRegistry(this)

    init {
        lifecycleRegistry.currentState = Lifecycle.State.CREATED
    }

    fun doOnResume() {
        lifecycleRegistry.currentState = Lifecycle.State.RESUMED
    }

    fun doOnDestroy() {
        lifecycleRegistry.currentState = Lifecycle.State.DESTROYED
    }
    override fun getLifecycle(): Lifecycle {
        return lifecycleRegistry
    }
}

Binding Cameraprovider do Lifecycle

camera = cameraProvider.bindToLifecycle(
                CustomLifecycle(), cameraSelector, preview, imageCapture, imageAnalyzer
            )

Nie mam pojęcia, jak to sprawić

Każda sugestia zostanie doceniona

1
Mohit Kumar 21 październik 2020, 21:05

1 odpowiedź

Najlepsza odpowiedź

Kontrola zdarzeń {X0}} i ON_STOP Gdy sprawa związana staje się aktywna i nieaktywna. Gdy przypadek użytkowania jest aktywny, spodziewa się rozpocząć odbierania danych (ramki) z kamery dołączonej do. Gdy przypadek użycia jest nieaktywny, nie oczekuje, że dane z kamery jest dołączone do.

Po pierwszym wiązaniu przypadków użytkowania na niestandardowy cykl życia, należy natychmiast przesunąć swój stan do ON_START (lub nawet {x1}}). Spowoduje to uruchomienie podglądu, analizator rozpocznie odbieranie ramek kamer, a będziesz mógł przechwycić obrazy. Po wywołaniu zwrotu {X2}} fragmentu można przenieść niestandardowy stan cyklu życia do ON_STOP. Kiedy fragment zostanie ostatecznie zniszczony, upewnij się, że przesuń stan cyklu cyklu do ON_DESTROY, aby zwolnić zasoby aparatu.

Jeśli chodzi o kod, możesz spojrzeć na Niestandardowy właściciel cyklu życia używany w Camerax. Możesz użyć go w następujący sposób do przypadku użycia.

class CameraFragment: Fragment() {

    private val customLifecycleOwner = CustomLifecycleOwner()

    override fun onViewCreated(view, savedState) {
        super.onViewCreated(view, savedState)
        // Initialize CameraX
        // Build use cases
        cameraProvider.bindToLifecycle(customLifecycleOwner, selector, useCases)
        customLifecycleOwner.startAndResume()
    }

    override fun onPause() {
        super.onPause()
        customLifecycleOwner.pauseAndStop()
    }

    override fun onDestroy() {
        super.onDestroy()
        customLifecycleOwner.destroy()
    }
}
2
Husayn Hakeem 22 październik 2020, 19:34