Почему моя SurfaceTexture в CameraPreview разрушается, когда я переключаю свой фрагмент в BottomNavigationView? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь получить предварительный просмотр камеры в textureView, в настоящее время все нормально, когда я запускаю приложение.

Но моя проблема добавляется, когда я хочу поместить свой фрагмент CameraPreview в BottomNavigationView. Все работает нормально при запуске приложения, но если я переключаю фрагмент из BottomNavigationView, вызывается метод onSurfaceTextureDestroyed () в SurfaceTextureListener (означает, что мой SurfaceTexture уничтожен), и мой фрагмент пуст (без предварительного просмотра камеры). В журналах mTextureView недоступен, поэтому в состоянии метода onResume слушатель переназначается, но метод onSurfaceTextureAvailable () никогда не вызывается.

Когда я блокирую свой телефон с помощью фрагмента CameraPreview, метод уничтожения не вызывается, и при его разблокировке доступен предварительный просмотр камеры, в чем разница между разблокировкой моего телефона и изменением отображаемого фрагмента в BottomNavigationView и тем, как я могу это сделать исправить мою проблему?

Мой код основан на образце Google Camera2API.

mtextureListener


private val mTextureListener = object : TextureView.SurfaceTextureListener
{
    @SuppressLint("MissingPermission")
    override fun onSurfaceTextureAvailable(surface: SurfaceTexture?, width: Int, height: Int) { checkCameraPermission(width, height) }
    override fun onSurfaceTextureSizeChanged(surface: SurfaceTexture?, width: Int, height: Int) = transformImage(width, height)
    override fun onSurfaceTextureUpdated(surface: SurfaceTexture?) = Unit
    override fun onSurfaceTextureDestroyed(surface: SurfaceTexture?): Boolean
    {
        // Called on fragment switch in bottomnavView but not called on phone locked... why ? and how to fix ?
        Log.e(TAG, "Surface texture destroyed"); return true 
    }
}

onResume инициализация текстуры


if (mTextureView.isAvailable)
{
    this.checkCameraPermission(mTextureView.width, mTextureView.height)
} else
{
    this.mTextureView.surfaceTextureListener = mTextureListener
}

Фактически: CameraPreview недоступен, когда я включаю его в BottomNavView

Ожидается: я хочу видеть камеру Preview при каждом переключении с BottomNavView

...